给定一个大小为 n 的数组,找到其中的众数。众数是指在数组中出现次数大于 ⌊ n/2 ⌋
的元素。
你可以假设数组是非空的,并且给定的数组总是存在众数。
示例 1:
输入: [3,2,3] 输出: 3
示例 2:
输入: [2,2,1,1,1,2,2] 输出: 2
哈希表的做法很简单,额外的空间复杂度为O(n),时间复杂度O(n);这里用摩尔投票法:摩尔投票法解求众数。做法:从第一个数开始,count为0,就把这个数换成candidate;向后遍历遇到相同的就count+1,不同count-1。
class Solution {
public:
int majorityElement(vector<int>& nums) {
int candidate = 0,count = 0;
for(int i = 0; i <nums.size();i++){
if(count == 0){
candidate = nums[i];
++count;
}
/*else不能掉,因为这两个操作是互斥而不是并列的,并且if之后candidate 和 nums[i]必然相等*/
else
candidate == nums[i]?++count:--count;
}
return candidate;
}
};
一个错误的写法:
/*class Solution {
public:
int majorityElement(vector<int>& nums) {
int candidate = nums[0],count = 1;
for(int i = 1; i <nums.size();i++){
candidate == nums[i]? ++count:--count;
if(count == 0)
candidate = nums[i];
}
return candidate;
}
};*/