首页 > 其他 > 详细

求众数II

时间:2021-08-09 14:10:20      阅读:18      评论:0      收藏:0      [点我收藏+]
技术分享图片

 


 

摩尔投票法,选出至多m个代表
变量简洁正确完整思路
对于num,找到对应的候选人cands[i],cnts[i]++,如果num找不到cands[i],从cnt[j]找到cnt[j]==0的进行取代,如果找不到cnt[j]==0的,对cnts[j]所有--,计数时,对cands的候选人计数,先cands[i]对应的cnts[i]=0然后遍历所有num进行cnt计数,遍历所有cands的cnt超过的更新答案

精确定义
cands候选人
cnts计数
nums选票,对应候选人
class Solution {
public:
    vector<int> majorityElement(vector<int>& nums) {
        vector<int>cands,cnts,ans;
        cands.assign(2,nums[0]);
        cnts.assign(2,0);
        for(int num:nums){
            bool findCands=false;
            for(int i=0;i<cands.size();i++){
                if(cands[i]==num){
                    cnts[i]++;
                    findCands=true;
                    break;
                }
            }
            if(!findCands){
                bool findCnt=false;
                for(int i=0;i<cands.size();i++){
                    if(cnts[i]==0){
                        cands[i]=num;
                        cnts[i]++;
                        findCnt=true;
                        break;
                    }
                }
                if(!findCnt){
                    for(int i=0;i<cands.size();i++){
                        cnts[i]--;
                    }
                }
            }
        }
        cnts.assign(2,0);
        for(int num:nums){
            for(int i=0;i<cnts.size();i++){
                if(cands[i]==num){
                    cnts[i]++;
                    break;
                }
            }
        }
        for(int i=0;i<cnts.size();i++){
            if(cnts[i]>nums.size()/3){
                ans.push_back(cands[i]);
            }
        }
        return ans;
    }
};

 

求众数II

原文:https://www.cnblogs.com/zhouzihong/p/15117885.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!