Majority Number III數組
給定一個數組(長度爲L),找到全部出現頻次大於1/k的數字。數據結構
咱們主要使用摩爾投票法(Voting Algorithm)結合Map的數據結構解決此問題。其時間複雜度O(n),空間複雜度O(k)。oop
主元素數量大於數組長度的1/k,所以有k-1一個候選人(Candidate),經過loop整個數組兩次獲得答案,遍歷第一次找有可能的候選人,第二次統計這些候選人出現的頻次。 spa
當數組長度L小於k時,直接對全部出現的數字進行統計獲得結果。it
當數組長度L大於等於k時,創建一個以<candidate, counter>的容量爲k-1的Map,遍歷數據進行統計,若是Map的容量未滿k-1或者存在candidate的頻次爲0,將遇到的數字選爲candidate; 若是Map的容量已滿k-1且全部candidate的頻次不爲零則全部candidate的頻次--。io
References:date
[1]https://www.zhihu.com/question/49973163遍歷