169 求眾數 229 求眾數 II

2021-08-26 20:40:05 字數 657 閱讀 6590

不限定時間複雜度的話,很多人會先排序,再遍歷的方法來做。不限定空間複雜度的話,很多人會用hash表來做。那麼,有了這兩個限定,就只能用摩爾投票演算法了。

主元素問題典型解法。摩爾投票演算法:時間複雜度o(n),空間複雜度o(1)

class solution 

else

if(nums[i]==ans)cnt++;

else cnt--;

}return ans;

}};

問題公升級為選取大於等於n/3的數,簡單分析可知,大於n/3的數最多有兩個。(反證法輕輕鬆鬆即可證明),採取和169一樣的摩爾投票演算法,只不過,這次保留兩個元素出現的次數。另外乙個區別是這個題目沒***此眾數一定存在,所以,在得到兩個候選眾數之後,需要再次遍歷一遍驗證。

class solution 

cm = cn = 0;

for (auto &a : nums)

if (cm > nums.size() / 3) res.push_back(m);

if (cn > nums.size() / 3) res.push_back(n);

return res;

}};

摩爾投票法 229 求眾數 II

給定乙個大小為 n 的陣列,找出其中所有出現超過 n 3 次的元素。說明 要求演算法的時間複雜度為 o n 空間複雜度為 o 1 示例 1 輸入 3 2,3 輸出 3 示例 2 輸入 1 1,1 3,3 2,2 2 輸出 1 2 解題 當要找大於n 2個個數的多數時,使用投票法,每次計數,當計數 0...

229 求眾數 II(JS實現)

給定乙個大小為 n 的陣列,找出其中所有出現超過 n 3 次的元素。說明 要求演算法的時間複雜度為 o n 空間複雜度為 o 1 示例 1 輸入 3,2,3 輸出 3 示例 2 輸入 1,1,1,3,3,2,2,2 輸出 1,2 這道題用摩爾投票法進行解答,根據題意我們知道超過1 3的出現次數這樣的...

leetcode 演算法 求眾數 169

leetcode 傳送門 給定乙個大小為 n 的陣列,找到其中的眾數。眾數是指在陣列 現次數大於 n 2 的元素。你可以假設陣列是非空的,並且給定的陣列總是存在眾數。示例 1 輸入 3,2,3 輸出 3 示例 2 輸入 2,2,1,1,1,2,2 輸出 2 本題是求陣列 現次數大於一半的元素。乙個基...