ac代码。。小米的题小坑
发布于 2017-09-18 20:42 3783 次浏览 0 赞 来自 笔试面试  
座位问题,就遍历字符串就行。。
/******************************开始写代码******************************/
    static boolean fun(String table, int n) {
        char[] seats = table.toCharArray();
        if(seats.length == 0 && n > 0)
            return false;
        else if(n == 0)
            return true;
        for(int i = 0; i < seats.length-1;) {
            if(seats[i] == '1') {
                i += 2;
                continue;
            }
            if(i == 0 && seats[i+1] == '0') {
                n --;
                i += 2;
            } else if(i > 0 && seats[i-1] == '0' && seats[i+1] == '0') {
                n --;
                i += 2;
            } else {
                i ++;
            }
            if(n == 0)
                return true;
        }
        return false;
    }
/******************************结束写代码******************************/
杨辉三角。。从第一行开始判断每一行出现没这个数。。贼鸡儿暴力。。但是ac了(所有的cases都在前100行)
/******************************开始写代码******************************/
    static long fun(long x) {
        if(x == 1)
            return 1;
        
        return getYFTriangleLine(100, x);
    }
    static long getYFTriangleLine(int lines, long target){
        long[] a = new long[lines + 1];
        long previous = 1;
        for (int i = 1; i <= lines; i ++){
            for (int j = 1; j <= i; j++){
                long current = a[j];
                a[j] = previous + current;
                previous = current;
                if(a[j] == target)
                    return i;
            }
        }
        return -1;
    }
/******************************结束写代码******************************/
动态规划求俩字符串的最大公共长度。。
/******************************开始写代码******************************/
    static boolean fun(String str) {
        if(str == null || "".equals(str))
            return true;
        int l = str.length();
        String rstr = new StringBuffer(str).reverse().toString();
        int[][] dp = new int[l+1][l+1];
        dp[0][0] = 0;
        for(int i = 0; i < l; i ++) {
            dp[0][i] = 0;
            dp[i][0] = 0;
        }
        
        for(int i = 1;i < l+1; i ++)
            for(int j = 1; j < l+1; j ++) {
                if(str.charAt(i-1) == rstr.charAt(j-1))
                    dp[i][j] = dp[i-1][j-1] +1;
                else {
                    dp[i][j] = Math.max(dp[i-1][j], dp[i][j-1]);
                }
            }
        return l - dp[l][l] <= 1;
    }
/******************************结束写代码******************************/


2 条回复

杨慧三角那题我开始就用数组累加,只通过11%

后来改用组合数通过22%,直接暴力也可以么?

第二题38%

第三题50%

问答题第一题不会

估计没了

2017-09-18 21:03

第一道题遍历一遍将有人的左右两边字符都换为x,然后数0的个数是否大于等于n,奈何只过 c++ 88%。。。

第二题一样的算法c++过不全,python 100% ????

第三题我就想的是如果加一个字母能成为回文,那么这个字母一定要和另一半的某个字母匹配,这样的话删除另一半的那个字母应该就能成为回文了。然而 。。也只过 c++ 88% 

我都怀疑是不是c++的那个默认的输入方式不能输入完一个长的字符串。。。

2017-09-18 21:09
添加回复
回到顶部