Java/169.(求众数) Majority Element

本文介绍了一种高效查找数组中出现次数超过一半的众数的方法。通过遍历数组并使用计数器来跟踪潜在的众数,该算法能在O(n)时间内找到答案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先上题目

Given an array of size n, find the majority element. The majority element is the element that appears more than ⌊ n/2 ⌋times.

You may assume that the array is non-empty and the majority element always exist in the array.

Example 1:

Input: [3,2,3]
Output: 3

Example 2:

Input: [2,2,1,1,1,2,2]
Output: 2






思路(暴力循环可以得出结果,但会超时)

1.前提为必定存在一个众数

2.设置一个标签,初始值为0。(用来判断当前数是否众数)循环数组,当与当前众数相同时count++;反之count--。

3.标签为0时,重新选择众数。(开始时假设nums[0]为众数)

4.在1的前提下,数组内部只有两种数字,众数和非众数,众数数量>n/2。最后当count!=0时,result必为众数.




代码部分一(超时)

class Solution {
    public int majorityElement(int[] nums) {
        int result =0;
            for(int i =0;i <nums.length;i++){
                int count =0;
                for(int j =0;j <nums.length;j++){
                    if(nums[i] ==nums[j]){
                        count++;
                    }else{
                        count--;
                    }
                }
                if(count>0){
                    result =nums[i];
                    break;
                }
            }
    return result;
    }
}


代码部分二(5ms)

class Solution {
    public int majorityElement(int[] nums) {
        int result =0,count =0;
        for(int i:nums){
            if(count ==0){
                result =i;
                count++;
            }else if(result !=i){
                --count;
            }else{
                ++count;
            }
        }
    return result;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值