力扣-229题 求众数 II(C++)- 摩尔投票法+有价值

系统管理员 2022-09-16 15:28 264阅读 0赞

题目链接:https://leetcode-cn.com/problems/majority-element-ii/
题目如下:
在这里插入图片描述
思路:
在这里插入图片描述

  1. class Solution {
  2. public:
  3. vector<int> majorityElement(vector<int>& nums) {
  4. vector<int> result;
  5. int candidate1=-1,candidate2=-1;
  6. int count1=0,count2=0;
  7. for(auto num:nums){
  8. if(count1>0&&num==candidate1) count1++;//如果该元素为第一个元素,则+1
  9. else if(count2>0&&num==candidate2) count2++;//如果该元素是第二个元素,则+1
  10. else if(count1==0) {
  11. candidate1=num;count1++;}//第一个元素需要换人
  12. else if(count2==0) {
  13. candidate2=num;count2++;}//第二个元素需要换人
  14. else {
  15. count1--;count2--;}//如果三个元素均不相同,则互相抵消1次
  16. }
  17. //记录两个有票的候选人分别有多少人投它
  18. int cnt1=0,cnt2=0;
  19. for(auto num:nums){
  20. if(count1>0&&num==candidate1) cnt1++;
  21. if(count2>0&&num==candidate2) cnt2++;
  22. }
  23. //判断出现的次数是否满足题意要求
  24. if(count1>0&&cnt1>nums.size()/3) result.push_back(candidate1);
  25. if(count2>0&&cnt2>nums.size()/3) result.push_back(candidate2);
  26. return result;
  27. }
  28. };

发表评论

表情:
评论列表 (有 0 条评论,264人围观)

还没有评论,来说两句吧...

相关阅读

    相关 229. II

    给定一个大小为 n 的整数数组,找出其中所有出现超过 `⌊ n/3 ⌋` 次的元素。 进阶:尝试设计时间复杂度为 O(n)、空间复杂度为 O(1)的算法解决此问题。 示例

    相关 投票

    背景: leetcode 169题求一个数组中,出现次数大于 n/2;的元素 如果在一个遍历中解决这个问题?? 答案就是摩尔投票法。 摩尔投票法:用一个计数器,每次当计

    相关 投票

    提问: 给定一个int型数组,找出该数组中出现次数大于数组长度一半的int值。 解决方案: 遍历该数组,统计每个int值出现次数,再遍历该数组,找出出现次数大于数组长度一半的