原题地址:https://leetcode-cn.com/problems/majority-element-ii/submissions/
题目描述:
给定一个大小为 n 的数组,找出其中所有出现超过 ⌊ n/3 ⌋ 次的元素。
说明: 要求算法的时间复杂度为 O(n),空间复杂度为 O(1)。
示例 1:
输入: [3,2,3]
输出: [3]
示例 2:
输入: [1,1,1,3,3,2,2,2]
输出: [1,2]
解题方案:
在上一题的基础上,继续采用摩尔投票法。
代码:
class Solution {
public:
vector<int> majorityElement(vector<int>& nums) {
int n = nums.size();
vector<int> ans;
int result1 = 0, result2 = 0, count1 = 0, count2 = 0;
for (int x : nums) {
if (x == result1)
count1++;
else if (x == result2)
count2++;
else if (count1 == 0) {
result1 = x;
count1 = 1;
} else if (count2 == 0) {
result2 = x;
count2 = 1;
} else {
count1--;
count2--;
}
}
count1 = count2 = 0;
for(int x : nums) {
if(x == result1)
count1++;
if(x == result2)
count2++;
}
if(count1 > (nums.size()/3))
ans.push_back(result1);
if((count2 > (nums.size()/3)) && (result2!=result1))
ans.push_back(result2);
return ans;
}
};