给定一个大小为 n 的整数数组,找出其中所有出现超过 ⌊ n/3 ⌋ 次的元素。
时间: 2023-02-10 10:11:18 浏览: 210
1.给出一个整数数组,求其中任意两个元素之差的最大值。
5星 · 资源好评率100%
给定一个大小为 n 的整数数组,找出其中所有出现超过 ⌊ n/3 ⌋ 次的元素。
这道题可以使用摩尔投票法来解决。摩尔投票法是一种在投票问题中统计票数的方法,其基本思想是在遍历数组时维护两个值:一个值和一个计数器。初始时,将值设为数组中的任意一个数,计数器设为 1。然后遍历数组中剩余的数,如果遇到相同的数,则计数器加 1,否则计数器减 1。如果计数器减少到 0,则将值设为当前数,并将计数器设为 1。这样,最终剩下的值就是数组中出现次数最多的数。
然后,我们再遍历一遍数组,统计剩下的值的出现次数,如果次数大于 ⌊ n/3 ⌋,则将这个数加入答案中。
下面是一个使用摩尔投票法的代码实现:
```
vector<int> majorityElement(vector<int>& 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;
阅读全文