人民搜索笔试题1

1、打印汉诺塔移动步骤,并且计算复杂度

2、计算两个字符串的是否相似(字符的种类,和出现次数相同)

编程之美中的一道经典的动态规划题目——计算两个字符串的相似度

public class StringSimilar {
    public int fun(String source,String target){
        int i,j;
        int[][] d = new int[source.length()+1][target.length()+1];
        for(i=1;i<source.length()+1;i++){/*初始化临界值*/
            d[i][0]=i;
        }
        for(j=1;j<target.length()+1;j++){/*初始化临界值*/
            d[0][j]=j;
        }
        for(i=1;i<source.length()+1;i++){/*动态规划填表*/
            for(j=1;j<target.length()+1;j++){
                if(source.substring(i-1, i).equals(target.substring(j-1, j))){
                    d[i][j]=d[i-1][j-1];/*source的第i个和target的第j个相同时*/
                }else{/*不同的时候则取三种操作最小的一个*/
                    d[i][j]=min(d[i][j-1]+1,d[i-1][j]+1,d[i-1][j-1]+1);
                }
            }
        }
        return d[source.length()][target.length()];
    }
    private int min(int i, int j, int k) {
        int min = i<j?i:j;
        min = min<k?min:k;
        return min;
    }
    public static void main(String[] args) {
        StringSimilar ss = new StringSimilar();
        System.out.println(ss.fun("SNOWY", "SUNNY"));//3
        System.out.println(ss.fun("a", "b"));//1
        System.out.println(ss.fun("abdd", "aebdd"));//1
        System.out.println(ss.fun("travelling", "traveling"));//1
    }
}


3、定义二叉树,节点值为int,计算二叉树中的值在[a,b]区间的节点的个数

4、动态规划题:一条路有k可坑,每次能跳平方数步长(1 4 9  16。。),不能跳到坑里,从a跳到b最少几步?

5、给一个整数数组,求数组中重复出现次数大于数组总个数一半的数。
个人资料
机器小王子
等级:7
文章:34篇
访问:3.2w
排名: 8
上一篇: 阿里巴巴B2B二面
下一篇:人民搜索笔试题2
猜你感兴趣的圈子:
人民搜索笔试面试圈
标签: ss、source、min、length、fun、面试题
隐藏