标签:c++ leetcode 229 majority element ii
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.
Hint:
How many majority elements could it possibly have?
Do you have a better hint? Suggest it!
记录在数组中出现次数最多的两个元素,然后判断这两个元素是不是出现次数超过n/3
AC代码
class Solution {
public:
vector<int> majorityElement(vector<int>& nums) {
int sum=nums.size();
if(sum<=1)
return nums;
vector<int> res;
int temp1=0;
int count1=0;
int temp2=0;
int count2=0;
for(int i=0;i<sum;++i)
{
if(count1==0||nums[i]==temp1)
{
++count1;
temp1=nums[i];
}
else if(count2==0||nums[i]==temp2)
{
++count2;
temp2=nums[i];
}
else
{
--count1;
--count2;
}
}
int sum1=0;
int sum2=0;
for(int i=0;i<sum;++i)
{
if(nums[i]==temp1)
++sum1;
else if(nums[i]==temp2)
++sum2;
else
continue;
}
if(sum1>sum/3)
res.push_back(temp1);
if(sum2>sum/3)
res.push_back(temp2);
return res;
}
};版权声明:本文为博主原创文章,未经博主允许不得转载。
[leetcode 229]Majority Element II
标签:c++ leetcode 229 majority element ii
原文地址:http://blog.csdn.net/er_plough/article/details/47399251