金智教育校園招聘筆試

選擇題部分

樹的前序遍歷、中序遍歷,排序算法的時間複雜度,虛函數,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));
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章