發帖水王——找出陣列中超一半的數
//不斷找出兩個不相同的數,然後把它們刪掉,當再找不出不相同的數時,剩下的數就是過半的數
int findoverhalf(int *id, int n)
else
}return candicate;
}
擴充套件,當有3個數,每乙個的個數都超過總數的1/4時
借用上面的思想,只不過每次是找出四個不同的
struct candidate
//需要判定多種情況:
//1.全部都為0
//2.部分為0
//3.全不為0
bool check_and_add(int num)
if(b == num && btimes != 0)
if(c == num && ctimes != 0)
if(atimes == 0)
if(btimes == 0)
if(ctimes == 0)
return true;
} void del()
int a, atimes;
int b, btimes;
int c, ctimes;
}person;
candidate findoverquarter(int *id,int n)
程式設計之美 2 3 尋找發帖「水王」
題目 尋找乙個id列表中,有乙個id超過了總數的一半,找出這個id 分析 可以對id進行排序,因為需要尋找的id超過了一半,所以該id列表id n 中,id n 2 一定是這個id值。複雜度為o nlgn 1 如果用排序這種方法解決的話,複雜度應該就維持在這個水平,不會降低。再思考一下,難道一定需要...
程式設計之美2 3 尋找發帖水王
這道題目由於不容易寫測試用例,所以,可以把題目轉換為 在乙個陣列中,有乙個數字出現的次數超過了陣列大小的一半,這和題目原意是一樣的。這道題目的思想是我們同時去掉陣列中兩個不一樣的數字,那麼,陣列中原來存在的規律是不變的 僅針對這個題目 好吧,還是先給出函式宣告 2.3 尋找發帖水王 bool dut...
程式設計之美2 3 尋找發帖「水王」
題目1 找到陣列中出現次數超過一半的元素 解法 使用另外不到1 2的元素與所求元素進行抵消 整個陣列抵消不同的兩個數,則超過1 2的元素還是原來的元素 public class main public static int findnum int input throws exception if ...