時間效率 陣列中出現次數超過一半的數字

2021-09-13 02:40:17 字數 1517 閱讀 4450

陣列中有乙個數字出現的次數超過陣列長度的一半,請找出這個數字。例如輸入乙個長度為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 ...