class Solution {
/*
* 假设数组为 N,其开始的三个元素为a,b,c,剩余的元素组成数组N'
* 如果三个元素全都不同,在N'中满足题意的元素集合包括 N中满足题意的元素
* 若有相同元素记录下来,在遍历N'时,再组成三个不同元素,再次剔除
*/
public:
vector<int> majorityElement(vector<int>& nums) {
int pos[2][2] = {{-1, 0}, {-1, 0}}; // {value, count} 最多有两个
for (int i = 0; i < nums.size(); ++i){
//pos[1][0] != nums[i] 要保持两个数组的value不同
if (pos[0][1] == 0 && pos[1][0] != nums[i]){
pos[0][0] = nums[i];
pos[0][1] = 1;
}
// pos[0][0] != nums[i] 要保持两个数组的value不同
else if (pos[1][1] == 0 && pos[0][0] != nums[i]){
pos[1][0] = nums[i];
pos[1][1] = 1;
}
else if (pos[0][0] == nums[i])
pos[0][1]++;
else if (pos[1][0] == nums[i])
pos[1][1]++;
else{
pos[0][1]--;
pos[1][1]--;
}
}
vector<int> ret;
for (int i = 0 ; i < 2; ++i){
int count = 0;
for (int j = 0; j < nums.size(); ++j)
if (nums[j] == pos[i][0])
count++;
if (count > nums.size() / 3)
ret.push_back(pos[i][0]);
}
return ret;
}
};
leetcode Majority Element II
最新推荐文章于 2020-09-22 17:08:26 发布