程式設計之美 水王問題及擴充套件

2021-07-13 06:28:53 字數 907 閱讀 6072

題目描述:

擴充套件問題:

隨著tango的發展,管理員發現,「超級水王」沒有了。統計結果表明,有3個發帖很多的id,他們的發帖數目都超過了帖子總數目n的1/4。你能從發帖id列表中快速找出他們的id嗎?

把陣列分為四個四個數字一組的來看。由於a的發帖數超過了1/4,所以,平均下來,在每乙個分組裡都有乙個a,並且至少在某一組中有大於乙個的a,假如分組1中的四個數字都不相同,我們刪除分組1,如果a不在分組1裡面,那麼在剩餘的2~n組中,a出現的次數顯然會繼續大於1/4;如果a在分組1裡面,那麼在剩餘2~n組中,平均下來,a還是會至少在每乙個分組出現一次。所以只要分組1中4個數字不相同(主要是保證沒有兩個a),那麼刪除分組1,並不改變a在剩餘陣列中出現次數依然大於1/4的事實。同理b,c。

#include

#include

using

namespace

std;

int find1(vector

&id)

else

}return a;

}void find3(vector

&id)

else

if (a == id[i])

else

if (tb == 0)

else

if (b == id[i])

else

if (tc == 0)

else

if (c == id[i])

else

}cout

<< a << endl << b << endl << c << endl;

}int main();

cout

id2 = ;

find3(id2);

return

0;}

程式設計之美 尋找發帖 水王 擴充套件

1.問題描述 快速找出發帖超過一半的的id 問題變型 現在有乙個陣列,已知乙個數出現的次數超過了一半,請用最小的複雜度的演算法找出這個數。問題擴充套件 有三個發帖很多的id,他們的發帖數目超過了帖子總數目的1 4,請從發帖id列表中找出它們 2.分析與解法 每次從列表中刪除兩個不同的id,那麼剩下的...

程式設計之美2 3尋找發帖水王和擴充套件問題

推薦 include include using namespace std void fun int len 15 int candi arr 0 設定水王候選人是下標為0的編號 int count 1 次數為1 for int i 1 i2 擴充套件問題 有3個發帖很多的id,他們的發帖數目都超...

程式設計之美 2 3尋找發帖「水王」之擴充套件問題

思路與書中2.3節尋找發帖水王的思路類似。每次刪除四個不同的id,那麼在剩下的id中,3個發帖很多的id,發帖數目仍然超過了剩餘帖子總數的1 4。可以不斷重複這個過程,直至id的不同個數等於3。如下 include include using namespace std unsigned numta...