纵有疾风起
人生不言弃

名企编程笔试题

写一个函数,输入一个二叉树,树中每个节点存放了一个整数值,函数返回这棵二叉树中相差最大的两个节点间的差值绝对值。

package alibaba.a0727;

public class Demo01 {   
    int maxValue(BinNode root){
        if(root == null)
            return 0;//其实应该返回最小负整数,这里假设0为最小值
        int left = maxValue(root.getLeft());//返回左节点最大值
        int right = maxValue(root.getRight());//返回右节点最大值
        int max = left>right?left:right;
        //左右节点的最大值与根值进行比较
        return max>root.getValue()?max:root.getValue();
    }

    int minValue(BinNode root){

        if(root == null)
            return 32767;
        int left = minValue(root.getLeft());
        int right = minValue(root.getRight());

        int min = left<right?left:right;
        return min<root.getValue()?min:root.getValue();
    }

    //先递归找到最大值,在递归找到最小值
    int diff(BinNode root){
        return maxValue(root)-minValue(root);
    }

}

class  BinNode{
    BinNode left,right;
    int value;
    public BinNode getLeft() {
        return left;
    }
    public void setLeft(BinNode left) {
        this.left = left;
    }
    public BinNode getRight() {
        return right;
    }
    public void setRight(BinNode right) {
        this.right = right;
    }
    public int getValue() {
        return value;
    }
    public void setValue(int value) {
        this.value = value;
    }
}

给定一个 query 和一个 text,均由小写字母组成。要求在 text 中找出以同样的顺序连 续出现在 query 中的最长连续字母序列的长度。例如, query 为“acbac”,text 为“acaccbabb”,那么text 中的“cba”为最长的连续出现在 query 中的字母序列,因此, 返回结果应该为其长度 3。请注意程序效率。

package alibaba.a0727;

public class Demo02 {

    public static int maxLengthInQuery(char[] query,char[] text){

        int[] length = new int[text.length];

        //第一趟只有第一个字符,第二趟前两个字符

        for(int i = 0;i<text.length;i++)
        {
            int size = 0;
            int temp = i;//暂存i

            //从最后一个字符开始比较
            for(int j = query.length-1;j >= 0;){
                if(text[i] == query[j])
                {
                    size++;
                    i--;
                    j--;
                    if(i<0){
                        break;//说明i所在text中字符比较完了
                    }
                }
                else 
                {
                    if( j == query.length - 1){
                        while(query[j] != text[i])
                            j--;
                    }else{
                        break;
                    }

                }

            }

            length[temp] = size;
            i = temp;

        }

        return Max(length);

    }

    public static int Max(int[] arr){

        int max = arr[0];
        for(int i = 1;i<arr.length;i++){
            if(arr[i] > max)
                max = arr[i];
        }
        return max;
    }

    public static void  main(String[] args) {

        char[] query = {'a','c','b','a','c'};
        char[] text = {'a','c','a','c','c','b','a','b','b'};

        System.out.println(maxLengthInQuery(query, text));
    }
}

原文链接:https://blog.csdn.net/scgaliguodong123_/article/details/47110881

本站声明:网站内容来源于网络,如有侵权,请联系我们,我们将及时处理。

未经允许不得转载:起风网 » 名企编程笔试题
分享到: 生成海报

评论 抢沙发

评论前必须登录!

立即登录