題目:陣列中有乙個數字出現的次數超過了陣列長度的一半,找出這個數字。
第一種思路 當然是如果無序的話,先排序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 ...