其他分享
首页 > 其他分享> > 寻找“众数”

寻找“众数”

作者:互联网

1、描述

寻找一个数组中出现最多的数字,这个数字出现的次数大于n/2

2、关键字

特殊“众数”,数组

3、思路

众数大于一半,直接位运算
我使用的是一个pair进行一轮遍历进行,统计抵消,

4、notes

忘记了但是位运算怎么写的了,
当使用i进行循环的时候,可以实现跳步

5、复杂度

时间O(N)
空间:O(1)

6、code

摩尔投票:
public:
    int majorityElement(vector<int>& nums) {
        int x = 0,votes = 0;
        for(auto num : nums){
            if(votes == 0) x = num;
            votes += num==x ? 1:-1;
        }
        return x;
    }
};

自己写的摩尔投票,兑子


class Solution {
public:
    int majorityElement(vector<int>& nums) {
        pair<int,int>res(nums[0],1);
        for(int i =1; i < nums.size(); i++){
            if(res.first == nums[i]){
                res.second++;
            }
            else{
                res.second--;
                if(res.second == 0 && i + 1 < nums.size()){
                    res.first = nums[i + 1];
                    i++;  // 因为上一句赋值了下一个元素,所以这里直接跳过这个 i+1
                    res.second = 1;
                }
            }
        }
        return res.first;

    }
};

标签:votes,nums,int,res,寻找,second,num,众数
来源: https://blog.csdn.net/Tlwhisper/article/details/117227442