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

2021-08-15 17:32:14 字數 705 閱讀 8389

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

分析:第一種思路,把序列從小到大排個序,然後相同的數字一定是連續的,記錄連續數的個數,判斷其長度。時間複雜度為o(nlog(n)),時間主要用在排序上。

class solution }}

if( cnt > sz/2)

return num;

else

return 0;

}};

第二種思路:假設存在出現次數超過原序列長度一般的數字,那麼我們可以通過cnt的加減來找到這個num,最後在遍歷一遍序列,計算該num出現的次數並加以判斷即可。這種方法的時間複雜度為o(n),比上一種方法簡潔。

class solution 

else if( cnt > 0 && num == numbers[i])//這裡cnt>0是必然的,可不用做判斷

cnt++;

else

cnt--;

}cnt = 0;

for( int i = 0; i < sz; i++)

if( cnt > sz/2)

return num;

else

return 0;

}};

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

記錄次數,直接用data.count k 也通過了。或者常規演算法,出現有序用二分查詢。class solution def getnumberofk self,data,k write code here if len data 0 return 0 count 0 low 0 high len ...

劍指offer第39 陣列中出現次數超過一半的數字

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

劍指Offer 028陣列中出現次數超過一半的陣列

028陣列 現次數超過一半的陣列 題目 陣列中有乙個數字出現的次數超過陣列長度的一半,請找出這個數字。例如輸入乙個長度為9的陣列。由於數字2在陣列 現了5次,超過陣列長度的一半,因此輸出2。如果不存在則輸出0 方法 map統計法 思路 遍歷陣列,用map來記錄每個數出現的次數,最後再遍歷map查詢是...