LeetCode229-求众数II-数学-计数

原题链接
在这里插入图片描述

Note:

开两个记录的变量,记录当前出现最多的数字,枚举数组,当前数字是其中一个,就记录++
如果不是,那么就由两个分别拿出来一个跟他抵消掉

如果两个都是0了,选择其中一个赋值并且记录为1

代码如下:
class Solution {
public:
    vector<int> majorityElement(vector<int>& nums) {
        int n1, n2, c1 = 0, c2 = 0;
        for(auto x: nums)
            if(c1 && x == n1) c1 ++;
            else if(c2 && x == n2) c2 ++;
            else if(!c1)    n1 = x, c1 = 1;
            else if(!c2)    n2 = x, c2 = 1;
            else c1 --, c2 --;

        int n = nums.size() / 3;
        c1 = 0, c2 = 0;
        for(auto x: nums)
            if(x == n1) c1 ++;
            else if(x == n2)    c2 ++;
        vector<int> ans;
        if(c1 > n)  ans.push_back(n1);
        if(c2 > n)  ans.push_back(n2);

        return ans;
    }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值