您的位置:首页 > 职场人生

剑指offer面试题 java解答6-10

2016-08-22 16:16 337 查看
面试题6:重建二叉树

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));
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 面试题