题意:求一个数组里面出现次数大于n/3的元素。
题解:分析一下,肯定最多存在2个。那么我们可以用类似求次数大于n/2的元素一样的做法。
class Solution {
public:
vector<int> majorityElement(vector<int>& nums) {
int t1 = 0, t2 = 0,num1,num2;
int n = nums.size();
for(int i = 0; i < n; i++)
{
if(t1 != 0 && num1 == nums[i])
{
t1++;
continue;
}
if(t2 != 0 && num2 == nums[i])
{
t2++;
continue;
}
if(t1 == 0)
{
t1++;
num1 = nums[i];
continue;
}
if(t2 == 0)
{
t2++;
num2 = nums[i];
continue;
}
t1--;
t2--;
}
int tt1 = 0,tt2 = 0;
for(int i = 0; i < n; i++)
{
if(t1 > 0 && nums[i] == num1) tt1++;
if(t2 > 0 && nums[i] == num2) tt2++;
}
vector<int> v;
if(tt1 > n / 3) v.push_back(num1);
if(tt2 > n / 3) v.push_back(num2);
return v;
}
};