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;
    }
}
posted @ 2025-05-28 09:22  回忆、少年  阅读(13)  评论(0)    收藏  举报