天天看點

java面試的算法題_java面試 - 經典算法題

題目一:

java面試的算法題_java面試 - 經典算法題
java面試的算法題_java面試 - 經典算法題

public class testClockwiseOutput { //順時針列印一個矩陣 @Test public void test(){ int[][] num = new int[100][100]; int n = 4; int count =1; for(int i=0;i

num[i][j]=count++;

}

}

output(num,0,n-1);

} public void output(int[][] num,int start,int end){ if(start>=end || end<=0)return; for(int i=start;i<=end;i++){

System.out.println(num[start][i]);

} for(int i=start+1;i<=end;i++){

System.out.println(num[i][end]);

} for(int i=end-1;i>=start;i--){

System.out.println(num[end][i]);

} for(int i=end-1;i>start;i--){

System.out.println(num[i][start]);

}

output(num,start+1,end-1);

}

}

題目二:

給出一個排序好的數組和一個數,求數組中連續元素的和等于所給數的子數組

//給出一個排序好的數組和一個數,求數組中連續元素的和等于所給數的子數組 @Test public void test(){ int[] num = {1,2,2,3,4,5,6,7,8,9}; int sum = 7;

findSum(num,sum);

} public void findSum(int[] num,int sum){ int left=0; int right=0; for(int i=0;i

left = i;

right = i; while(curSum

curSum += num[right++];

} if(curSum==sum){ for(int j=left;j

System.out.print(num[j]+" ");

}

System.out.println();

}

}

}

題目三:

java面試的算法題_java面試 - 經典算法題

//字元數組組成的所有字元串 @Test public void test(){ //char[] cs = {'a','b','c','d','e'}; char[] cs = {'a','b','c'}; int length = cs.length;

recursionSwap(cs,0,length);

} public void swap(char[] cs,int index1,int index2){ char temp = cs[index1];

cs[index1]=cs[index2];

cs[index2]=temp;

} public void recursionSwap(char[] cs,int start,int length){ if(start>=length-1){

print(cs); return;

} for(int i=start;i

swap(cs,start,i);

recursionSwap(cs,start+1,length);

swap(cs,start,i);

}

} public void print(char[] cs){ for(int i=0;i

System.out.print(cs[i]);

}

System.out.println();

}

題目四:

java面試的算法題_java面試 - 經典算法題

//數組組成的最小數 @Test public void test(){ int[] num={1,5,9,13,442,44,6,21,211};

qsort(num,0,num.length-1);

System.out.println(Arrays.toString(num));

} public void qsort(int[] num,int left,int right){ if(left

qsort(num,left,partition-1);

qsort(num,partition+1,right);

}

} public int partition(int[] num,int left,int right){ int partition = num[left]; while(left

right--;

}

swap(num,left,right); while((num[left]==partition || isMBigerThanN(num,partition,num[left])) && left

left++;

}

swap(num,left,right);

} return left;

} public void swap(int[] num,int m,int n){ int temp = num[m];

num[m]=num[n];

num[n]=temp;

} public boolean isMBigerThanN(int[] num,int m,int n){

String num1 = String.valueOf(m);

String num2 = String.valueOf(n); int temp1 = Integer.parseInt(num1+num2); int temp2 = Integer.parseInt(num2+num1); if(temp1>temp2){ return true;

} else{ return false;

}

}

題目五:

java面試的算法題_java面試 - 經典算法題

//子數組最大和 @Test public void test(){ int[] num = {1,-2,3,10,-4,7,2,-5}; //int[] num = {1,-2,3,10,-4,10,2,-5}; System.out.println(maxSum(num));

} public int maxSum(int[] num){ int curSum = 0; int curMaxSum = -99999999; int start = 0; int end = 0; for(int i=0;i

curSum = num[i];

start = i;

} else{

curSum += num[i];

} if(curSum>curMaxSum){

curMaxSum = curSum;

end = i;

}

} for(int i = start;i<=end;i++){

System.out.println(num[i]);

} return curMaxSum;

}

題目六:

java面試的算法題_java面試 - 經典算法題

public class testMinStack { //自定義棧,min函數得到目前最小值 @Test public void test(){

MinStack ms = new MinStack();

ms.push(5);

System.out.println(ms.min());

ms.push(6);

ms.push(2);

ms.push(1);

System.out.println(ms.min());

ms.pop();

System.out.println(ms.min());

ms.pop();

System.out.println(ms.min());

}

} class MinStack{ private Stack minStack = new Stack(); private Stack stack = new Stack(); public int pop(){

minStack.pop(); return stack.pop();

} public void push(int num){ if(minStack.size()<=0){

minStack.push(num); return;

}

Integer min = minStack.lastElement(); if(num

minStack.push(num);

} else{

minStack.push(min);

}

stack.push(num);

} public int min(){ if(minStack.size()<=0){ return -1;

} return minStack.lastElement();

}

}

題目七:

java面試的算法題_java面試 - 經典算法題

//找出數組中出現次數大于一半的數 @Test public void test(){ int[] num = {1,2,2,2,2,2,2,4,2,4,6,4,2,6,8,2,7,7};

System.out.println(moreThanHaft(num));

} public int moreThanHaft(int[] num){ int result = -1; int times = 0; for(int i=0;i

result = num[i];

times++;

} else{ if(num[i]==result){

times++;

} else{

times--;

}

}

} return result;

}

題目八:

java面試的算法題_java面試 - 經典算法題

//判斷一個數組是否是另一個棧的出棧順序 @Test public void test(){ int[] num = {1,2,3,4,5}; //int[] num1={1,2,3,5,4}; int[] num2={2,1,5,3,4};

Stack s1 = new Stack();

Stack s2 = new Stack(); for(int i=0;i<5;i++){

s2.push(num2[i]);

}

System.out.println(testOrder(num,s1,s2));

} public boolean testOrder(int[] num,Stack s1,Stack s2){ int length = num.length; for(int i=0;i

s1.push(num[i]); int s2Num = s2.lastElement(); if(s2Num==s1.lastElement().intValue()){

s1.pop();

s2.pop();

}

} while(!s1.isEmpty()){ if(!s1.pop().equals(s2.pop())){ return false;

}

} return true;

}

題目九:

java面試的算法題_java面試 - 經典算法題

//從撲克牌抽5張牌,0可以為任意數,判斷是否是順子 @Test public void test(){ int[] num = {0,1,5,3,2};

System.out.println(check(num));

} public boolean check(int[] num){ //0-13 int[] pai = new int[14]; for(int n : num){

pai[n]+=1;

}

qsort(num,0,num.length-1); int count = pai[0]; int start = 0; if(num[0]==0){

start=num[1];

} else{

start=num[0];

} for(int i = start;i<=start+5;i++){ if(pai[i]>1)return false;

count += pai[i];

} if(count == 5)return true; else return false;

} public void qsort(int[] num,int left,int right){ if(left

qsort(num,left,partition-1);

qsort(num,partition+1,right);

}

} public int partition(int[] num,int left,int right){ int partition = num[left]; while(left=partition){

right--;

}

swap(num,left,right); while(left

left++;

}

swap(num,left,right);

} return left;

} public void swap(int[] num,int m,int n){ int temp = num[m];

num[m]=num[n];

num[n]=temp;

}

題目十:

java面試的算法題_java面試 - 經典算法題

//輸出第k個醜數(因子隻有2,3,5) @Test public void test(){

findUglyNum(8);

} public void findUglyNum(int index){ int[] num = new int[index]; int next = 1;

num[0]=1; int index2=0; int index3=0; int index5=0; while(next

num[next] = getSuitable(num2,num3,num5); while(num[index2]*2<=num[next]){

index2++;

} while(num[index3]*3<=num[next]){

index3++;

} while(num[index5]*5<=num[next]){

index5++;

}

next++;

}

System.out.println(num[index-1]);

} public int getSuitable(int num2,int num3,int num5){ int s = num2; if(num3

s = num3;

} if(num5

s = num5;

} return s;

}