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题目AC代码:https://github.com/PoughER/leetcode