面試訓練陣列中出現次數超過一半的數字

2021-06-09 02:03:42 字數 696 閱讀 5586

題目:陣列中有乙個數字出現的次數超過了陣列長度的一半,找出這個數字。

第一種思路 當然是如果無序的話,先排序o(n logn),然後o(n)遍歷陣列

第二種思路 當然是取雜湊,key為數字,value為出現數字,然後o(n)遍歷雜湊表

海濤思路

就是只判斷前後兩個元素的關係,重複利用陣列的特性,乙個數字出現的次數超過了陣列長度的一半。

那麼我遍歷陣列 當後面元素和前面不同 我就計數減1,若相同那麼則計數加1,可以知道,最後乙個使得計數值從負數變為正數的就是最大值

#include "stdio.h"

int findmostnum(int *data,int len)

else if(data[i] == last)

else

} times =0;

for(i=0;iif(times*2<=len)

return last;

}int main()

; int temp,len;

len = sizeof(data)/sizeof(data[0]);

temp = findmostnum(data,len);

printf("%d\n",temp);

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 ...