每日一題之找出頻率》1 k的數字

2021-06-28 07:57:01 字數 868 閱讀 3705

題意描述:

讀入n個數字,這n個數字中,有乙個數字出現的次數》n/k,剩下的每乙個數字都是單獨出現的,求那個數字是多少?

k<=10,空間限制到不能開100以上的陣列。

騙分思路:

因為只有答案的那個數字是出現次數》=1次的,那麼在讀入的時候記錄讀入的前乙個數字,判斷這個數字和上乙個數字是不是相等,如果相等,則必然是答案。這樣子做,已經可以通過絕大多數(幾乎100%的)隨機資料了,但是依然不能保證ac,例如1 2 1 3 1 4 1 5 1這樣的資料。

思路1:

既然只判斷乙個不行,那就多開點陣列,開個大小為80的陣列,每次讀入乙個數字判斷和前80個是否有相等的,如果有就輸出。

從理解上來講,這樣可以提高找到答案的正確率,實際上,這樣的思路是100%正確的,來看一下證明:

假設我們讀入的數字是k,而我們比較了任何乙個數字和它之前的(k)個,發現都沒有相等的。

那麼,重複的那個數字出現的次數,最多最多只能有n/(k+1)+1個《題目上說的出現次數。例如,當n=8,k=2的時候,對每個數字比較前2個都沒有相等,則這個序列只可能是:

x 1 2 x 3 4 x 5

與題目描述的出現頻率》8/2=4次不符,因此不可能有這樣的情況。反過來說,用這樣的辦法,總是能夠找到一對相同的數字!

實現的時候用迴圈佇列來實現,可以降低一維移動陣列的複雜度。

for (int i=0;i>arr[t];

for (int j=0;j<=k;j++)

if (j!=t && arr[j]==arr[t])

if (flag) continue;

if (zong+10)

}}int zuida=0;

for (int j=0;j

每日一題 丟失的數字

給定乙個包含 0,n 中 n 個數的陣列 nums 找出 0,n 這個範圍內沒有出現在陣列中的那個數。高階 你能否實現線性時間複雜度 僅使用額外常數空間的演算法解決此問題?示例 1 輸入 nums 3,0,1 輸出 2 解釋 n 3,因為有 3 個數字,所以所有的數字都在範圍 0,3 內。2是丟失的...

每日一題之找出兩個單獨出現的數字

題目 讀入2n個數字,其中,除了有兩個數字是單獨出現外,剩下任何乙個數字出現次數都是偶數個,請寫出演算法找出這兩個數字並輸出 讀入樣例 81 3 4 5 9 1 4 3 輸出 5 9 思路1 看到這道題目,第一反應就是for迴圈列舉一遍,然後統計每個數字出現的次數,最後輸出出現次數是奇數次的 map...

每日一題 找出陣列中的幸運數

在整數陣列中,如果乙個整數的出現頻次和它的數值大小相等,我們就稱這個整數為 幸運數 給你乙個整數陣列 arr,請你從中找出並返回乙個幸運數。如果陣列中存在多個幸運數,只需返回 最大 的那個。如果陣列中不含幸運數,則返回 1 示例 1 輸入 arr 2,2,3,4 輸出 2 解釋 陣列中唯一的幸運數是...