题目
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。
你可以假设数组是非空的,并且给定的数组总是存在多数元素。输入: [1, 2, 3, 2, 2, 2, 5, 4, 2]
输出: 2
解题
分析
1、某个数字超过数组的一半,若两个不同的数字两两抵消,则最后剩的那个数字一定是要查找的结果;
2、若某个数字连续出现,对数字cnt++,方便对应消除cnt个不同字母不同数字两两抵消
int cnt = 0; int res = 0;
for(int num : nums){
if(cnt == 0){
res = num;
cnt++
}else{
cnt += (res == num? 1 : -1);
}
return res;