[leetcode]229. Majority Element II
来源:互联网 发布:中兴软件有限责任公司 编辑:程序博客网 时间:2024/05/18 07:21
题目链接:https://leetcode.com/problems/majority-element-ii/#/description
Given an integer array of size n, find all elements that appear more than ⌊ n/3 ⌋
times. The algorithm should run in linear time and in O(1) space.
思路:
观察可知,数组中至多可能会有2个出现次数超过 ⌊ n/3 ⌋
的众数
记变量n1, n2为候选众数; c1, c2为它们对应的出现次数
遍历数组,记当前数字为num
若num与n1或n2相同,则将其对应的出现次数加1
否则,若c1或c2为0,则将其置为1,对应的候选众数置为num
否则,将c1与c2分别减1
最后,再统计一次候选众数在数组中出现的次数,若满足要求,则返回之。
class Solution{public: vector<int> majorityElement(vector<int>& nums) { int t1,t2,n1=0,n2=0; for(int i=0;i<nums.size();i++) { if(n1!=0 && t1==nums[i]){++n1;continue;} if(n2!=0 && t2==nums[i]){++n2;continue;} if(n1==0){t1=nums[i];++n1;continue;} if(n2==0){t2=nums[i];++n2;continue;} n1--;n2--; } int z1=0,z2=0; for(int i=0;i<nums.size();i++) { if(n1>0){if(nums[i]==t1) z1++;} if(n2>0){if(nums[i]==t2) z2++;} } vector<int> ret; if(z1>nums.size()/3) ret.push_back(t1); if(z2>nums.size()/3) ret.push_back(t2); return ret; }};
阅读全文
0 0
- LeetCode 229. Majority Element II
- [LeetCode]229. Majority Element II
- 229. Majority Element II LeetCode
- [leetcode] 229. Majority Element II
- LeetCode 229. Majority Element II
- LeetCode *** 229. Majority Element II
- 【leetcode】229. Majority Element II
- leetcode.229. Majority Element II
- LeetCode - 229. Majority Element II
- [leetcode]229. Majority Element II
- [leetcode]229. Majority Element II
- [leetcode] 229. Majority Element II
- LeetCode 229. Majority Element II
- Leetcode 229. Majority Element II
- [LeetCode]229. Majority Element II
- Leetcode 229. Majority Element II
- LeetCode 229. Majority Element II
- [LeetCode]229. Majority Element II
- termios 详解
- 欢迎使用CSDN-markdown编辑器
- 4
- A标签使用javascript:伪协议
- 数塔取数问题
- [leetcode]229. Majority Element II
- Cloudera Manager 5.9 和 CDH 5.9 离线安装指南及个人采坑填坑记
- Maven 启动报错
- 少的力量,强大到你难以想象
- 自定义仿QQ主界面选项卡
- jQ常用知识点整理
- gym100971
- 如何用Cocos2d-android写一个小游戏
- 设计模式的六种原则