找出一堆數中個數超過一半的數

2021-09-06 10:58:56 字數 922 閱讀 8062

問題描述

一堆數(例如6, 2, 2, 6, 3, 4, 6, 6, 6, 6),總共10個,其中」6「的個數超過總數的一半5,找出這個個數超過過半的那個數。

思路

從頭到尾遍歷,兩個數相同接著往後遍歷;否則刪掉這兩個數,接著往後遍歷。因為所找的那個數過半,所以不同的數相抵,抵消掉最後還會至少剩下乙個那個要找的數。

圖示

}問題複雜度分析時間複雜度o(n)

空間複雜度o(1)

問題擴充套件

有1024個器件,有超過一半的是好的,剩下的那些是壞的。其中,有個驗貨機,好的和別的放在一起,好的可以識別出對方是好壞;壞的無法識別出對方好與壞(會給出任意結果),如何找出所有好的零件。

找出陣列出現次數超過一半的數

例如 陣列中1出現了5次超過長度9的一半。因此輸出1 注 這裡沒有考慮出現次數最多的數字是0的情況,關鍵在於方法 這裡給出兩種常用方法 這種演算法優點在於理解起來比較容易,如果乙個數出現次數超過長度的一半,那將陣列排序之後位於陣列中間位置的數一定就是要找到的數。注 需要檢測一下中間的數是否是超過一半...

找出陣列中出現次數超過一半的數

分析 最直接的方法,對陣列中所有的數排序,然後再掃瞄一遍,統計各個數出現的次數。如果某個數出現的次數超過一半,則輸出這個數。演算法的時間複雜度是o n log 2n n 如果每次刪除兩個不同的數,那麼,在剩下的數字裡,超過一半的數的個數一樣超過了50 不斷重複這個過程,最後剩下的即 為所求。無需避免...

出現次數超過一半的數

時間限制 1000 ms 記憶體限制 65536 kb 提交數 315 通過數 126 給出乙個含有n 0 n 1000 個整數的陣列,請找出其中出現次數超過一半的數。陣列中的數大於 50且小於50。第一行包含乙個整數n,表示陣列大小 第二行包含n個整數,分別是陣列中的每個元素,相鄰兩個元素之間用單...