给定一个大小为 n 的数组,找出其中所有出现超过 ⌊ n/3 ⌋ 次的元素。
说明: 要求算法的时间复杂度为 O(n),空间复杂度为 O(1)。
解法:Boyer-Moore投票法
相似题目:169. 多数元素
class Solution {
public:
vector<int> majorityElement(vector<int>& nums) {
vector<int> result;
if (nums.empty()) return result;
int candidate1 = nums[0], count1 = 0;
int candidate2 = nums[0], count2 = 0;
for (int num : nums) {
if (candidate1 == num) {
count1++;
} else if (candidate2 == num) {
count2++;
} else if (count1 == 0) {
candidate1 = num;
count1++;
} else if (count2 == 0) {
candidate2 = num;
count2++;
} else {
count1--;
count2--;
}
}
count1 = 0;
count2 = 0;
for (int num : nums) {
if (candidate1 == num)
count1++;
else if (candidate2 == num)
count2++;
}
if (count1 > nums.size() / 3) result.push_back(candidate1);
if (count2 > nums.size() / 3) result.push_back(candidate2);
return result;
}
}; 
京公网安备 11010502036488号