给定一个大小为 n 的整数数组,找出其中所有出现超过 ⌊ n/3 ⌋ 次的元素。
这道题可以使用摩尔投票法来解决。摩尔投票法是一种在投票问题中统计票数的方法,其基本思想是在遍历数组时维护两个值:一个值和一个计数器。初始时,将值设为数组中的任意一个数,计数器设为 1。然后遍历数组中剩余的数,如果遇到相同的数,则计数器加 1,否则计数器减 1。如果计数器减少到 0,则将值设为当前数,并将计数器设为 1。这样,最终剩下的值就是数组中出现次数最多的数。
然后,我们再遍历一遍数组,统计剩下的值的出现次数,如果次数大于 ⌊ n/3 ⌋,则将这个数加入答案中。
下面是一个使用摩尔投票法的代码实现:
``` vector majorityElement(vector & nums) { int n = nums.size(); if (n == 0) return {};
int val1 = nums[0], val2 = nums[0];
int count1 = 0, count2 = 0;
for (int num : nums) {
if (num == val1) {
count1++;
} else if (num == val2) {
count2++;
} else if (count1 == 0) {
val1 = num;
count1 = 1;
} else if (count2 == 0) {
val2 = num;
count2 = 1;