题目:给定一个大小为 n 的数组 nums ,返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。
代码:
int majorityElement(vector<int>& nums) {
int count = 1;
int ans = nums[0];
for(int i=1;i<nums.size();i++){
if(ans==nums[i]){
count++;
}else{
count--;
if(count==0){
count = 1;
ans = nums[i];
}
}
}
return ans;
}
通过此问题记录一下摩尔投票法:
若存在答案,可知必定存在某一数字出现次数大于数组的1/2,那么可以开始进行消耗。从第一个数开始,记录次数,若遇到不同的数就count减一。当减为0时,转而记录当前遍历到的数字,并重置count为1,重新开始计数,直至遍历完整个数组。由于某个数字出现次数大于1/2,经过这种消耗正确答案也不会被消耗掉,可以轻易得出答案。