Description
Given an integer array of size n
, find all elements that appear more than ⌊ n/3 ⌋
times.
Example 1:
Input: nums = [3,2,3]
Output: [3]
Example 2:
Input: nums = [1]
Output: [1]
Example 3:
Input: nums = [1,2]
Output: [1,2]
Constraints:
1 <= nums.length <= 5 * 104
-109 <= nums[i] <= 109
Follow up: Could you solve the problem in linear time and in O(1)
space?
Code
hashmap
解題邏輯和 Majority Element 一樣,只是多使用了 set 來 erase duplicate。
Moore Voting Algorithm
因為題目限制 majority element 個數要大於 n/3,因此刪除 vote 的對象變成三個人,即是底下 code 中 if(mp.size() == 3)
的由來。
可以 generalize 到限制為 n/k,使用if(mp.size() == k)
即可。
Source