Total Accepted: 30176
Total Submissions: 115847
Difficulty: Medium
Given an integer array of size n, find all elements that appear more than ⌊ n/3 ⌋
times. The algorithm should run in linear time and in O(1) space.
Hint:
- How many majority elements could it possibly have?
- Do you have a better hint? Suggest it!
Subscribe to see which companies asked this question
Hide Similar Problems
思路:
最多只能有两个数符合结果,因此用两个变量,计算它们是否超过⌊ n/3 ⌋。
java code:
public class Solution {
public List<Integer> majorityElement(int[] nums) {
List<Integer> ans = new ArrayList<Integer>();
if(nums == null || nums.length == 0) return ans;
int x = 0, y = 1;
int cx = 0, cy = 0;
for(int num : nums) {
if(num == x) {
cx++;
}
else if(num == y) {
cy++;
}
else if(cx == 0) {
x = num;
cx = 1;
}
else if(cy == 0) {
y = num;
cy = 1;
}
else {
cx--;
cy--;
}
}
cx = cy = 0;
for(int num : nums) {
if(num == x) cx++;
else if(num == y) cy++;
}
if(cx > nums.length/3) ans.add(x);
if(cy > nums.length/3) ans.add(y);
return ans;
}
}