名企编程笔试题

来源:互联网 发布:人人商城小程序源码 编辑:程序博客网 时间:2024/05/18 20:06

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

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));    }}
0 0
原创粉丝点击