剑指 Offer 39. 数组中出现次数超过一半的数字
思路:摩尔投票法
- 初始化:票数统计votes=0,众数x
- 循环:遍历数组
- 当票数votes=0,则假设当前数字是num
- 当num=x时,票数votes加1;当num!=x时,票数votes减1
- 返回值:x
class Solution {
public:
int majorityElement(vector<int>& nums) {
int x=0,count=0;
for(int num:nums){
if(count==0)x=num;
count+=x==num?1:-1;
}
return x;
}
};
时间复杂度 O(n)
空间复杂度 O(1)