選擇題部分
樹的前序遍歷、中序遍歷,排序算法的時間複雜度,虛函數,TCP/IP協議等等。
總結:小題側重數據結構,網絡協議等一些基礎知識。
編程題
用遞歸方法判斷一個數組是不是遞增數組
/**
*
*/
package com.su.JinZhi;
/**
* @title IsIncreaseArray.java
* @author Shuai
* @date 2016-5-9下午2:39:41
*/
public class IsIncreaseArray {
public static boolean isIncrease(int[] array,int length){
if(array==null||length<=0)
return false;
if(length==1)
return true;
return (array[length-1]>array[length-2])&&isIncrease(array,length-1);
}
public static void main(String[] args){
int[] array={1,2,3,4,5};
System.out.println(isIncrease(array,array.length));
}
}
求一個平衡二叉樹的深度
可以理解爲編程擴展題
抽取5張牌,判斷是不是順子(是否連續),A:10,J:11,Q:12,K:13,大小王可充當任意數字。
思路:首先把這道題的描述轉換成一種計算機語言。
5張牌:5個數的數組。
牌的數字從1-13(不包括大小王)
大小王:可以看成數字0(可看成任意數字,只要和1-13不重複即可)
分析:5張牌除了0(可以有兩個),其餘數字不能重複,否則就不是順子(順序統計)
滿足這樣的邏輯:min表示5個數中最小的數,max表示5個數中最大的數
當數組中沒有0時,max-min==4時,恰好是順子
當數組中有一個0時,max-min==4或3,恰好是順子
當數組中有兩個0時,max-min==4或3或2,恰好是順子
其他情況不是順子。
/**
*
*/
package com.su.JinZhi;
/**
* @title IsContinuous.java
* @author Shuai
* @date 2016-5-9下午2:14:37
*/
public class IsContinuous {
public static boolean isContinuous(int[] array){
if(array==null||array.length!=5)
throw new RuntimeException("輸入的不是5個數");
int[] poker_hash=new int[14];//0...13,count
for(int i=0;i<14;i++){
poker_hash[i]=0;
}
int min=13;
int max=1;
for(int i=0;i<5;i++){
if(array[i]!=0&&array[i]>max){
max=array[i];
}
if(array[i]!=0&&array[i]<min){
min=array[i];
}
poker_hash[array[i]]++;
}
for(int i=0;i<5;i++){
if(array[i]!=0&&poker_hash[array[i]]>1)
return false;
}
if(poker_hash[0]==0){
if(max-min==4)
return true;
}
if(poker_hash[0]==1){
if(max-min==4||max-min==3)
return true;
}
if(poker_hash[0]==2){
if(max-min==4||max-min==3||max-min==2)
return true;
}
return false;
}
public static void main(String[] args){
int[] array={0,1,0,4,5};
System.out.println(isContinuous(array));
}
}