Majority Element
俄罗斯方块的消除方式。出现两个不一样的消除:counter 减一。
- A
- A B -> 消除
class Solution {
public:
int majorityElement(vector<int>& nums) {
int major;
int count = 0;
for (int i = 0; i < nums.size(); i++) {
if (count == 0) {
major = nums[i];
count++;
} else {
count += (nums[i] == major)? 1 : -1;
}
}
return major;
}
};
Majority Element II
同理:俄罗斯方块的消除方式,当出现三个不一样的时候消除。 要注意的是,最后得到的candidate,需要再过一遍数组来确定是不是最后的答案。
class Solution {
public:
vector<int> majorityElement(vector<int>& nums) {
int x = 0;
int y = 1;
//just need to be different test with case [0,0,0,0,0,0]
int cnt1 = 0;
int cnt2 = 0;
for (int i = 0; i < nums.size(); i++) {
if (nums[i] == x) {
cnt1++;
} else if (nums[i] == y) {
cnt2++;
} else if (cnt1 == 0) {
x = nums[i];
cnt1++;
} else if (cnt2 == 0) {
y = nums[i];
cnt2++;
} else {
cnt1--;
cnt2--;
}
}
cnt1 = 0, cnt2 = 0;
for (int i = 0; i < nums.size(); i++) {
if (nums[i] == x) {
cnt1++;
} else if (nums[i] == y) {
cnt2++;
}
}
vector<int> rst;
if (cnt1 > nums.size() / 3) {
rst.emplace_back(x);
}
if (cnt2 > nums.size() / 3) {
rst.emplace_back(y);
}
return rst;
}
};
Majority Element III
More than 1/k