劍指offer 陣列中出現數字超過一半得數字

2021-09-02 23:10:56 字數 428 閱讀 8349

題目描述

陣列中有乙個數字出現的次數超過陣列長度的一半,請找出這個數字。例如輸入乙個長度為9的陣列。由於數字2在陣列中出現了5次,超過陣列長度的一半,因此輸出2。如果不存在則輸出0。

解題思路:若陣列中有數字出現的次數超過了陣列長度的一半,那麼這個數也就是陣列的中位數,也就是要尋找排序後第length/2的數。可以利用快速排序的partition過程。

public void swap(int arr,int a,int b)

public int partition(int arr,int l,int r)

swap(arr,l,r);

return l;

}public int morethanhalfnum_solution(int array)

《劍指offer》 數字在排序陣列中出現的次數

由排序陣列可以想到使用二分查詢法先查找到乙個待查的數字,然後再確定該數字第一次出現的位置和最後一次出現的位置,相減即可得到該數字在排序陣列中出現的次數。該方法的時間複雜度為o logn k第一次出現的下標 int getfirstk vector data,int lo,int hi,int k e...

劍指offer 數字在排序陣列中出現的次數

統計乙個數字在排序陣列中出現的次數。解法與思路 陣列時排序好的陣列,要找乙個數字在排序陣列中出現的次數。首先我們想知道這個數字是否在陣列出現了,這樣很自然我們就會想到在乙個排序的陣列中找乙個數字,那麼應該採用二分查詢,時間複雜度為o logn 如果這個數字在陣列中,返回這個數字對應的數字下標。從這個...

劍指offer 數字在排序陣列中出現的次數

題目 劍指offer 數字在排序陣列中出現的次數 樸素的思路不說了,掃一遍就行了。class solution return cnt 參考了這篇鏈結 劍指offer面試題 32.數字在排序陣列中出現的次數 的確是學到了更好的思路,主要也是自己對於排序陣列還是不夠敏感。對於陣列類題目,其實常見的處理思...