演算法之美 尋找發帖水王演算法

2021-06-29 00:55:48 字數 370 閱讀 6928

演算法題目來自於書籍《程式設計之美》,描述如下:

論壇中有人老是發水帖,現在管理員要通過某種方法把這個水貼大王找出來,請設計乙個可行的演算法。

首先第乙個想到的就是遍歷了,每遇到乙個id便將id記錄下來,並且count++;這是乙個時間、空間複雜度都很大的乙個演算法,差評。

書上給了新的演算法,演算法的設計思想在於:每次刪除兩個不同的id,刪除之後剩下的水王的id依然會大於總數的一半,這就意味著可以將問題分解,分解為一些小問題來解決,c++實現如下:

#includeusing namespace std;

int find(int id, int n)

{int sw;

int count;

for(int i=0;i

改進演算法 程式設計之美之尋找發帖水王

問題描述 問題描述 原作者提供兩種思路 1.尋找水王,水王灌水超過一半,按id排序,1 2處一定是水王 2.不同id則同時刪,刪完後剩餘id中仍有至少一半是水王 改進 在第二種方法 中,加入判斷重複次數是否已經大於n 2的 使得最優情況下時間複雜度降到水王發帖數。include using name...

尋找發帖「水王」與擴充套件演算法 《程式設計之美》

首先想到的是乙個最直接的方法,我們可以對所有id進行排序。然後再掃瞄一遍排好序的id列表,統計各個id出現的次數。如果某個id出現的次數超過總數的一半,那麼就輸出這個id。這個演算法的時間複雜度為o n log2 n n 如果id列表已經是有序的,還需要掃瞄一遍整個列表來統計各個id出現的次數嗎?如...

程式設計之美 尋找發帖「水王」

描述 直接拍照,懶得打字 此題很容易轉換為,在乙個陣列中,有乙個數出現的次數超過了陣列元素個數的一半,請找出這個元素。方法一 對陣列排序進行排序,利用通常的排序方法,複雜度o nlgn 再遍歷一遍陣列,找出那個元素,複雜度為o n 空間複雜度o 1 方法二 空間換時間吧,在開闢乙個陣列,hash對映...