華泰面試題

第一題

給定一個數組,找到其中一個數字出現的次數超過數組長度的一半。例如輸入一個長度爲9的數組{2,5,3,5,5,2,5,4,5}。由於數字5在數組中出現了5次,超過數組長度的一半,因此輸出5。如果不存在則輸出0。

public static int findMoreThanHalfNum(int[] numbers) {
       for(int i=0,len = numbers.length,half=len/2,count=0;i<len;i++,count=0){
            for (int j = 0; j < len; j++)
                if (numbers[i] == numbers[j]) count++;
            if (count * 2 > len) return numbers[i];
        }
        return 0;
    }

    public static void main(String[] args) {
        int[] arr={2,5,3,5,5,2,5,4,5};
        System.out.println(findMoreThanHalfNum(arr));
    }

第二題:計算股票每日漲幅

SELECT a.code,a.date,a.price,(b.price-a.price)/a.price as 'change'
FROM TB_SHAREPRICE a LEFT JOIN TB_SHAREPRICE b ON a.code=b.code AND a.id+1=b.id;

第三題:計算價格 (這樣計算會有精度問題)

/**
     *價格序列(2, 2.1, 1.9, 2.0, 2.4, 2.3, 2.2, 2.1, 2.2, 2.3)
     */
    public static void main(String[] args) {
        double[] arr={2, 2.1, 1.9, 2.0, 2.4, 2.3, 2.2, 2.1, 2.2, 2.3};
        List<Double> lowList = getLowList(arr);
        List<Double> highList = getHighList(arr);
        double maxProfit=0;
        for(int i=0;i<Math.min(lowList.size(),highList.size());i++){
            maxProfit+=highList.get(i)-lowList.get(i);}
        System.out.println(maxProfit);
    }

    private static List<Double> getHighList(double[] arr) {
        ArrayList<Double> highList = new ArrayList<>();
        for(int i=1,len=arr.length;i<len-1;i++)
            if (arr[i]>arr[i-1]&& arr[i]>arr[i+1])highList.add(arr[i]);
        if(arr[arr.length-1]>arr[arr.length-2])highList.add(arr[arr.length-1]);
        return highList;
    }

    private static List getLowList(double[] arr) {
        ArrayList<Double> lowList = new ArrayList<>();
        if(arr[0]<arr[1])lowList.add(arr[0]);
        for(int i=1,len=arr.length;i<len-1;i++)
            if (arr[i]<arr[i-1]&& arr[i]<arr[i+1])lowList.add(arr[i]);
        return lowList;
    }

第四題: 計算二叉樹深度

private static int calcHeight(Folder folder){
        if (folder == null) return 0;
        int height = 0;
        if (folder.left != null){
            height = Math.max(height, calcHeight(folder.left));
        }
        if(folder.right != null){
            height = Math.max(height, calcHeight(folder.right));
        }
        return height + 1;
    }

第五題: 請用JAVA實現以下函數,基於給定的起始日期,終止日期參數計算期限(Tenor)

要求:
1)Tenor是指起始日(包含)與終止日(不含)之間的時間長度,以:xD, xW, xM, xY的形式表示。其中x爲正整數,D爲日,W爲周,M爲月,Y爲年單位,並且Tenor只能出現1個單位(最簡形式)。
比如:
Get Tenor(2017/2/1,2017/3/1)
        正確答案:1M
        錯誤答案:28D
Get Tenor(2017/3/1,2018/9/1)
        正確答案:18M
        錯誤答案:1.5Y(x不爲整數)或 1Y6M(出現多個單位)
2)代碼需要體現出必要的邊界檢查,對JAVA或C++語法的準確性不做嚴格要求,代碼整潔,清晰即可
3)對於實現中需要的日期相關計算函數,可進行必要的假設,不要求提供正確的類庫API名稱
4)基於方法實現儘可能多的寫出相應的單元測試用例,給出輸入參數和期望結果,無需給出具體測試代碼實現
String get Tenor(Date startDate,Date endDate) {
   //TODO
}
這裏寫代碼片
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章