給定乙個大小為 n 的陣列,找出其中所有出現超過 ⌊ n/3 ⌋ 次的元素。這道題用摩爾投票法進行解答,根據題意我們知道超過1/3的出現次數這樣的數,最多出現兩個,因此設定兩個變數,遍歷整個陣列進行投票說明: 要求演算法的時間複雜度為 o(n),空間複雜度為 o(1)。
示例 1:
輸入: [3,2,3]
輸出: [3]
示例 2:
輸入: [1,1,1,3,3,2,2,2]
輸出: [1,2]
/**
* @param nums
* @return
*/var
majorityelement
=function
(nums)
if(num === num2)
if(count1 ===0)
if(count2 ===0)
count1--
;//數字不同,則減一票
count2--
;//數字不同,則減一票
} count1 = count2 =0;
for(
let num of nums)
const res =
;if(count1 > len /
3) res.
push
(num1);if
(count2 > len /
3&& num1 !== num2) res.
push
(num2)
;return res;
};
169 求眾數 229 求眾數 II
不限定時間複雜度的話,很多人會先排序,再遍歷的方法來做。不限定空間複雜度的話,很多人會用hash表來做。那麼,有了這兩個限定,就只能用摩爾投票演算法了。主元素問題典型解法。摩爾投票演算法 時間複雜度o n 空間複雜度o 1 class solution else if nums i ans cnt ...
摩爾投票法 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...
解題思路 leetcode第229題 求眾數
給定乙個大小為 n 的整數陣列,找出其中所有出現超過 n 3 次的元素。高階 嘗試設計時間複雜度為 o n 空間複雜度為 o 1 的演算法解決此問題。示例 1 輸入 3,2,3 輸出 3 示例 2 輸入 nums 1 輸出 1 示例 3 輸入 1,1,1,3,3,2,2,2 輸出 1,2 1 num...