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

2021-09-23 18:21:29 字數 869 閱讀 1561

題目描述

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

方法一:

思路:使用mapnumbersmap; 來記錄陣列中每個元素出現的次數。最後出現次數最多的那個元素,如果該元素的出現次數超過陣列長度的一半,返回2,否則返回0。

class solution 

int maxcount = 0;

int point;

for (map::iterator mapit = numbersmap.begin(); mapit != numbersmap.end(); mapit++)

}if(maxcount > len/2)

return point;

else

return 0;

}};

如果有符合條件的數字,則它出現的次數比其他所有數字出現的次數和還要多。

在遍歷陣列時儲存兩個值:一是陣列中乙個數字,一是次數。遍歷下乙個數字時,若它與之前儲存的數字相同,則次數加1,否則次數減1;若次數為0,則儲存下乙個數字,並將次數置為1。遍歷結束後,所儲存的數字即為所求。然後再判斷它是否符合條件即可。

class solution 

if(number == numbers[i])

times++;

else

times--;

}times = 0;

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

return (times > len/2) ? number : 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查詢是...