您的位置:首页 > 其它

Leetcode180: Majority Element II

2015-12-04 17:17 309 查看
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.

因为不超过n/3个数的数最多只有2个,可以定义两个变量,利用类似Majority Element中的思路求解。

class Solution {
public:
vector<int> majorityElement(vector<int>& nums) {
int n1 = 0, n2 = 0, t1 = 0, t2 = 0;
for(int i = 0; i < nums.size(); i++)
{
if(nums[i] == n1)   t1++;
else if(nums[i] == n2)  t2++;
else if(t1 == 0)
{
n1 = nums[i];
t1 = 1;
}
else if(t2 == 0)
{
n2 = nums[i];
t2 = 1;
}
else
{
t1--;
t2--;
}
}
t1 = 0; t2 = 0;
for(int i = 0; i < nums.size(); i++)
{
if(nums[i] == n1)   t1++;
else if(nums[i] == n2)   t2++;
}
vector<int>res;
if(t1 > nums.size()/3)  res.push_back(n1);
if(t2 > nums.size()/3)  res.push_back(n2);
return res;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: