不限定時間複雜度的話,很多人會先排序,再遍歷的方法來做。不限定空間複雜度的話,很多人會用hash表來做。那麼,有了這兩個限定,就只能用摩爾投票演算法了。主元素問題典型解法。摩爾投票演算法:時間複雜度o(n),空間複雜度o(1)
問題公升級為選取大於等於n/3的數,簡單分析可知,大於n/3的數最多有兩個。(反證法輕輕鬆鬆即可證明),採取和169一樣的摩爾投票演算法,只不過,這次保留兩個元素出現的次數。另外乙個區別是這個題目沒***此眾數一定存在,所以,在得到兩個候選眾數之後,需要再次遍歷一遍驗證。class solution
else
if(nums[i]==ans)cnt++;
else cnt--;
}return ans;
}};
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 本題是求陣列 現次數大於一半的元素。乙個基...