名企编程笔试题
2015-07-28 20:37
417 查看
写一个函数,输入一个二叉树,树中每个节点存放了一个整数值,函数返回这棵二叉树中相差最大的两个节点间的差值绝对值。
给定一个 query 和一个 text,均由小写字母组成。要求在 text 中找出以同样的顺序连 续出现在 query 中的最长连续字母序列的长度。例如, query 为“acbac”,text 为“acaccbabb”,那么text 中的“cba”为最长的连续出现在 query 中的字母序列,因此, 返回结果应该为其长度 3。请注意程序效率。
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)); } }
相关文章推荐
- 1. Java面向对象之泛型-认识泛型
- C++错误:不允许使用不完整的类型
- 1、代码开发规范。
- Java基础之集合函数-Map
- JDK基本介绍
- java基础之集合函数-Set
- 中国大学MOOC-翁恺-C语言程序设计习题集 07-0 到 08-1
- php对象转化为数组
- Java学习之路0728(十二)(Class类、反射、Annotation功能注解)
- java基础之集合函数-List
- Delphi7学习第五天
- JAVA 注解
- 在Eclipse中关联源代码
- 二叉排序树C++实现
- Java学习之路0727(十一)(正则表达式、线程)
- Java实现手机号码归属地判别
- java基础之理解多态
- Java(07-28)学习总结
- Java画陆龟
- Python的面向对象、Class 概念与使用