题目描述:
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。
你可以假设数组是非空的,并且给定的数组总是存在多数元素。
示例 1:
输入: [1, 2, 3, 2, 2, 2, 5, 4, 2]
输出: 2
限制:
1 <= 数组长度 <= 50000
方法1:
主要思路:
(1)使用标识数字,当标识数字和当前数字相同时,将统计数量加1,当和当前数字不同时,将统计数量减一,当统计数量为0时,将标识数字换成当前的数字,重新统计;
(2)由于其中的一个数字出现的次数超过一半,则最后剩下的标识数字就是该数字;
class Solution {
public:
int majorityElement(vector<int>& nums) {
if(nums.size()==1){
return nums.back();
}
int count=0;//统计当前标识数字的数量
int lable=nums[0];//标识数字
for(int& num:nums){
if(count==0){//为零时,更换当前的标识数字
count++;
lable=num;
}
else if(num==lable){
++count;
}
else {
--count;
}
}
return lable;
}
};