剑指offer面试题 java解答6-10
2016-08-22 16:16
337 查看
面试题6:重建二叉树
面试题7:用两个栈实现队列
面试题8:旋转数组的最小数字
面试题9:斐波那契数列
面试题10:二进制中1的个数
public class test6 { private class Node<T> { public T value; public Node lChild=null; public Node rChild=null; public Node(T value) { this.value = value; } } public Node root; public Node construct(String preorder,String inorder,int length){ Node root=new Node(preorder.charAt(0)); int leftLen=0; int rightLen=0; //求取左子树长度 for (int i = 0; i <length; i++) { if (preorder.charAt(0)==inorder.charAt(i)) { break; } if (preorder.charAt(0)!=inorder.charAt(i)) { leftLen++; } } //右子树长度 rightLen=length-leftLen-1; if (leftLen>0) { root.lChild=construct(preorder.substring(1,leftLen+1), inorder.substring(0, leftLen),leftLen); } if (rightLen>0) { root.rChild=construct(preorder.substring(leftLen+1), inorder.substring(leftLen+1),rightLen); } return root; } public static void main(String[] args) { String preorder="12473568"; String inorder="47215386"; test6 t=new test6(); Node head=t.construct(preorder, inorder,8); } }
面试题7:用两个栈实现队列
import java.util.Stack; public class test7 { private Stack stack1; private Stack stack2; public test7(){ stack1=new Stack(); stack2=new Stack(); } public <T> void addTail(T value) { stack1.push(value); } public <T> T deleteHead(){ if (stack2.size()<=0) { while (stack1.size()>0) { T tmp=(T) stack1.pop(); stack2.push(tmp); } } return (T) stack2.pop(); } public static void main(String[] args) { int[] a={1,2,3,4,5}; test7 t=new test7(); for (int i = 0; i < a.length; i++) { t.addTail(a[i]); } for (int i = 0; i < a.length; i++) { System.out.println(t.deleteHead()); } } }
面试题8:旋转数组的最小数字
//二分法 public class test8 { public int Min(int[] a){ int left=0; int right=a.length-1; int mid=0; while (left<right) { if (right-left==1) { mid=right; break; } mid=(left+right)/2; if (a[left]==a[mid]&&a[mid]==a[right]) { return MinInOrder(a,left,right); } if (a[mid]>=a[left]) { left=mid; } if (a[mid]<=a[right]) { right=mid; } } return a[mid]; } private int MinInOrder(int[] a, int left, int right) { int min=a[left]; for (int i = left+1; i <=right; i++) { if (min>a[i]) { min=a[i]; } } return min; } public static void main(String[] args) { int[] a={3,4,5,1,2}; test8 t=new test8(); System.out.println(t.Min(a)); } }
面试题9:斐波那契数列
public class test9 { public long Fabonacci(int n) throws Exception { if (n<0) { throw new Exception("n is invalid"); } int[] result={0,1}; if (n<2) { return result ; } long fabonacciOne=0; long fabanacciTwo=1; long fabanacciNow=0; for (int i = 2; i <= n; i++) { fabanacciNow=fabonacciOne+fabanacciTwo; fabonacciOne=fabanacciTwo; fabanacciTwo=fabanacciNow; } return fabanacciNow; } public static void main(String[] args) throws Exception { test9 t=new test9(); System.out.println(t.Fabonacci(5)); } }
面试题10:二进制中1的个数
public class Test10 { public int NumberOf1(int n) { int flag=1; int num=0; while (flag>0) { if ((n&flag)>0) { num++; } flag=flag<<1; } return num; } public static void main(String[] args) { Test10 t=new Test10(); System.out.println(t.NumberOf1(7)); } }
相关文章推荐
- 剑指offer面试题 java解答66-67
- 剑指Offer面试题10(Java版):二进制中的1的个数
- 剑指offer面试题 java解答46-50
- 剑指offer面试题 java解答56-60
- 剑指offer面试题 java解答1-5
- <剑指offer 面试题10_1>斐波那契数列 Java
- 剑指offer-chapter2-面试题10-二进制中1的个数(java)
- 剑指offer面试题 java解答11-15
- 九度剑指Offer面试题10:二进制中1的个数(Java题解)
- 剑指offer--面试题10:二进制中1的个数--Java实现
- 剑指offer面试题 java解答31-35
- 剑指offer--面试题3:二维数组的查找--Java实现
- 【剑指offer】面试题3:二位数组中的查找 java
- 剑指offer--面试题10--相关
- 剑指offer面试题4 替换空格(java)
- 剑指offer面试题5 从头到尾打印链表(java)
- 【剑指Offer学习】【面试题10 :二进制中1 的个数】
- 剑指offer--面试题7:用两个栈实现队列--Java实现
- 剑指offer面试题5 从头到尾打印链表(java)
- 剑指offer 面试题10 计算数字中1的个数