思路:
分享DISCUSS里的非常trick的一种解法,非常nice:
从头开始遍历,如果遇到两个不同的元素,则去掉这两个元素,最后剩下的一定是majority element。题目给的数据保证了一定存在majority element。
时间复杂度O(N),空间复杂度O(1)。
class Solution {
public:
int majorityElement(vector<int>& nums) {
int count = 0;
int candidate = 0;
for(int i = 0; i < nums.size(); ++i) {
if(count == 0) {
candidate = nums[i];
count++;
}else {
if(nums[i] == candidate) {
count++;
}else {
count--;
}
}
}
return candidate;
}
};
注:
该解法可扩展到⌊ n/k ⌋的情况,即每k个不同的element进行成对删除。