的問題是:查找是否有在出現的陣列的數目超過N/8倍
描述了一種算法,在O(n)的發現的時間,如果存在n個數字,一個陣列出現超過n/8次的數字。
現在我有這就是答案:
我們會做的選擇在地方的數字:N/9,2 * N/9,3 * N/9,...,8 * N/9,並且檢查這8位候選人中是否有一位出現至少n/8次。
但我不明白爲什麼會這個算法的工作。
例如,考慮以下數組: [3,3,1,3,2,3,4,3,5,3,6,3,7,3,8,3,9,3] 。
因此,這裏n = 18,如果這個算法的候選人將是1,2,4,5,6,7,8,9,當我們檢查這些數字是否至少出現n/8次答案將是否定的,但實際上3答案是肯定的。
所以我不明白這是爲什麼算法正確...
只有重複是相鄰的纔有意義。 – karakfa
你能幫我找到一個正確的算法嗎? – ChikChak
這是一個*作業問題,*不是嗎?和你一樣,我沒有看到爲什麼你的「答案」實際上會起作用的原因,*除非,*也許,這個載體被認爲是**排序的。**我希望你有一個翻譯得很好的博士。 Djikstra的*排序和搜索*附近的書架上... –