选择题部分
树的前序遍历、中序遍历,排序算法的时间复杂度,虚函数,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));
}
}