40.数组中出现次数超过一半的数字
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。
假设数组非空,并且一定存在满足条件的数字。
思考题:
- 假设要求只能使用 O(n) 的时间和额外 O(1) 的空间,该怎么做呢?
数据范围:
数组长度 [1,1000]。
样例:
输入:[1,2,1,1,3]
输出:1
代码:
class Solution {
public int moreThanHalfNum_Solution(int[] nums) {
//t为候选众数,cnt为候选众数的计数
int t = 0,cnt = 0;
for(int i = 0;i<nums.length;i++){
//如果当前计数为0,选择当前数字作为候选众数
if(cnt == 0)t = nums[i];
//如果当前数字等于候选众数,计数+1,否则计数-1
cnt += nums[i]==t? 1:-1;
}
//最终剩下的候选众数即为超过半数的数字
return t;
}
}

浙公网安备 33010602011771号