LeetCode - Majority Element II
2015-07-17 14:40
369 查看
Majority Element II
Total Accepted: 4935 TotalSubmissions: 23021My Submissions
Question
Solution
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.
类似摩尔投票,用两个计数器,当前数字与计数器代表的数字都不同时,将两个计数器都减一
class Solution {
public:
vector<int> majorityElement(vector<int>& nums) {
int n = nums.size();
vector<int> a(2, 0), b(2, 0);
int index = 0;
for(auto x : nums){
if(b[0] == 0 || a[0] == x){
a[0] = x;
++b[0];
}
else if (b[1] == 0 || a[1] == x){
a[1] = x;
++b[1];
}
else{
--b[0];
--b[1];
}
}
vector<int> ans;
b[0] = b[1] = 0;
for(auto x : nums){
if(a[0] == x){
++b[0];
}
else if(a[1] == x){
++b[1];
}
}
if(b[0] > n / 3) ans.push_back(a[0]);
if(b[1] > n / 3) ans.push_back(a[1]);
return ans;
}
};
相关文章推荐
- 用批处理解决数学问题的代码第1/4页
- php常用数学函数汇总
- 无限循环小数
- 数学书籍备忘
- leetcode 179 Largest Number
- leetcode 24 Swap Nodes in Pairs
- leetcode 2 Add Two Numbers 方法1
- leetcode 2 Add Two Numbers 方法2
- 建立以人为本的数学课程观
- 文兴小学2008-2009学年度第一学期数学科教学计划
- MySql函数大全<二>
- 一生受用的数学公式
- oracle中行列转换
- 数学猜想
- 世界第一数学强校的背后
- 数学是一种思考方式
- 【巧用数学面板达成书写表达式】
- C语言产生随机数
- shell浮点运算工具bc
- 论数学