题目
此题和多数元素一样的思想。多了个判断的过程,需要循环2遍。后边发现原来这类题有个算法名称的。
class Solution {
public:
vector<int> majorityElement(vector<int>& nums) {
int n = nums.size();
if(n == 1) {
return nums;
}else if(n == 2) {
if(nums[1] == nums[0]) nums.pop_back();
return nums;
}else {
int val1,val2;
int cnt1 = 0,cnt2 = 0;
for(int i = 0;i < n;++i) {
if(cnt1 && nums[i] == val1) {
++cnt1;
}else if(cnt2 && nums[i] == val2) {
++cnt2;
}else if(!cnt1) {
val1 = nums[i];
++cnt1;
}else if(!cnt2) {
val2 = nums[i];
++cnt2;
}else {
--cnt1;
--cnt2;
}
}
int c1 = 0,c2 = 0;
for(int i = 0;i < n;++i) {
if(val1 == nums[i]) ++c1;
if(val2 == nums[i]) ++c2;
}
vector<int> ans;
if(c1 > n/3 && cnt1) ans.push_back(val1);
if(c2 > n/3 && cnt2) ans.push_back(val2);
return ans;
}
}
};