1.算法原理:先第一个数字假设为众数,然后计算器设为1,比较下个数和次数是否相等,若相等则计数器加一,反之减一。然后看此时计数器值是否为零,若为零,则将当前值设为候选众数
2. 算法前提:数组中一定含有众数
3.应用场景:从一个数组中找出出现半数以上的元素,可变形为出现次数超过1/k次的元素有哪些。
4. 时间复杂度:O(n) 空间复杂度:O(1)
int MajorityVote(vector<int> nums) {
int res = 0, cnt = 0;
for (auto &num : nums) {
if (cnt == 0) {
res = num;
cnt++;
}
else if (num == res)cnt++;
else cnt--;
}
return res;
}