第一題
給定一個數組,找到其中一個數字出現的次數超過數組長度的一半。例如輸入一個長度爲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
}
這裏寫代碼片