我準備寫一系列關於編程的博客,旨在提高自己的編程能力。編程能力是一個程序員修養的重要體現,編程不僅可以提高自己的邏輯思維能力,而且可以提高處理問題的能力以及考慮問題的全面性。每篇一個題目,願與君共勉。
題目描述:數組中有一個數字出現的次數超過數組長度的一半,請找出這個數字。例如輸入一個長度爲9的數組{1,2,3,2,2,2,5,4,2}。由於數字2在數組中出現了5次,超過數組長度的一半,因此輸出2。如果不存在則輸出0。
題目要求:時間限制:1秒 空間限制:32768K
解題思路:
- 首先,數組中有一個數字出現的次數超過數組長度的一半就暗示了一條很重要的信息,即如果該數存在,我們對數組進行排序,那麼array[array.length/2]一定等於該數值。
- 如果排序你想出來了,那麼接下來的問題就迎刃而解了。我們只需要定義一個計數器count來記錄該值的個數。怎麼記錄?通過一個for循環就完全可以解決了。
- 最後,我們只需判斷count是否大於(array.length/2)就可以了。
實現代碼如下:
public class Test01 {
public int MoreThanHalfNum_Solution(int [] array) {
//判斷數組的長度是否大於0
if(array.length<1){
return 0;
}
//對數組進行排序,如果對數組的操作不瞭解,請看我博客裏面的數組詳解
Arrays.sort(array);
//定義一個計數器,記錄array[array.length/2]出現的次數
int count = 0;
//遍歷數組中的元素
for (int i = 0; i < array.length; i++) {
//如果相等,count加一
if(array[i]==array[array.length/2]){
count++;
}
}
//判斷該數字出現的次數是否超過長度的一半,沒有則返回0
if(count<=array.length/2){
return 0;
}
//返回數組中數字出現次數超過長度一半的數值。
return array[array.length/2];
}
public static void main(String[] args) {
Test01 test = new Test01();
int[] array = {1,2,2,3,2,2,5,4,2};
int result = test.MoreThanHalfNum_Solution(array);
System.out.println(result);
}
}
運行結果如下:
2
總結
本題編程實現並不難,主要考慮到時間複雜度和空間複雜度,即該算法的效率,本題的時間複雜度爲O(n)。對時間複雜度和空間複雜度不瞭解的可關注我的博客–數據結構與算法基本知識。在進行編程之前,切不可試探性編寫,我們首先解決的是思路,然後纔是coding的過程。