陣列中有乙個數字出現的次數超過陣列長度的一半,請找出這個數字。例如輸入乙個長度為9的陣列。由於數字2在陣列**現了5次,超過陣列長度的一半,因此輸出2。如果不存在則輸出0。
思路:法1:借助hashmap儲存陣列中每個數出現的次數,最後看是否有數字出現次數超過陣列長度的一半;
法2:排序。陣列排序後,如果某個數字出現次數超過陣列的長度的一半,則一定會陣列中間的位置。所以我們取出排序後中間位置的數,統計一下它的出現次數是否大於陣列長度的一半;
法3:某個數字出現的次數大於陣列長度的一半,意思就是它出現的次數比其他所有數字出現的次數和還要多。因此我們可以在遍歷陣列的時候記錄兩個值:1. 陣列中的數字;2. 次數。遍歷下乙個數字時,若它與之前儲存的數字相同,則次數加1,否則次數減1;若次數為0,則儲存下乙個數字,並將次數置為1。遍歷結束後,所儲存的數字即為所求。最後再判斷它是否符合條件。
python實現1:
// an highlighted block
class
solution
: def morethanhalfnum_solution
(self, numbers)
: # write code here
if not numbers:
return
0 res = numbers[0]
times =
1 length =
len(numbers)
for i in
range(1
, length)
:if times ==0:
res = numbers[i]
times =
1 elif res == numbers[i]
: times +=
1else
: times -=
1import collections
return res if collections.
counter
(numbers)
[res]*2
> length else
0
python實現2:
// an highlighted block
class
solution
: def morethanhalfnum_solution
(self, numbers)
: # write code here
numbers.
sort()
theone = numbers[
len(numbers)/2
]if numbers.
count
(theone)
>
len(numbers)/2
:return theone
return
0
陣列中出現超過一半的次數
題目 陣列中有乙個數字出現的次數超過陣列長度的一半,請找出這個數字。例如輸入乙個長度為9的陣列。由於數字2在陣列中出現了5次,超過陣列長度的一半,因此輸出2。如果不存在則輸出0.思路一 把陣列排好序,出現次數超過一半的數一定是排好序陣列的中位數。然後取中位數,計算它出現的次數是否超過陣列長度的一半。...
陣列中出現次數超過一半的數字
何海濤 劍指offer 名企面試官精講典型程式設計題 九度oj 題目描述 陣列中有乙個數字出現的次數超過陣列長度的一半,請找出這個數字。例如輸入乙個長度為9的陣列。由於數字2在陣列中出現了5次,超過陣列長度的一半,因此輸出2。輸入 每個測試案例包括2行 第一行輸入乙個整數n 1 n 100000 表...
陣列中出現次數超過一半的數字
陣列中出現次數超過一半的數字 陣列中有乙個數字出現的次數超過陣列長度的一半,請找出這個數字。例如輸入乙個長度為9的陣列。由於數字2在陣列中出現了5次,超過陣列長度的一半,因此輸出2。如果不存在則輸出0。class solution count 0 for auto i numbers if i k ...