【LeetCode-简单题】169. 多数元素

文章提供了两种在Java中找出数组中出现次数超过n/3的多数元素的方法:一是使用HashMap进行元素计数,找到出现次数最多的元素;二是运用摩尔投票法,通过互相抵消来确定多数元素。这两种方法各有特点,适用于不同的场景。
摘要由CSDN通过智能技术生成

题目

在这里插入图片描述

题解一:map集合计数

 /**
     * map集合计数
     * @param nums
     * @return
     */
    public static int majorityElement(int[] nums) {


        Map<Integer, Integer> map = new HashMap<>();

        //第一个for循环将数组中的元素作为key   出现次数作为value存入map  并且key重复  就value+1
        for (int i = 0; i < nums.length; i++) {

            if (map.containsKey(nums[i])) {
                map.put(nums[i], (map.get(nums[i]))+1);
            }else {
                map.put(nums[i],1);
            }
        }
        int maxKey = 0;   //记录最大value的key
        int maxValue =Integer.MIN_VALUE; //记住最大value

        //取出map集合最大的value
        for (Map.Entry<Integer,Integer> entry:map.entrySet()){
            int value = entry.getValue();
            if (value > maxValue) {
                maxValue = value;
                maxKey = entry.getKey();
            }
        }
        return maxKey;

    }

题解二:摩尔投票法思路

原理就是互相抵消,最后肯定是元素数量多的那个元素票数不为0
在这里插入图片描述

/**
     *摩尔投票法思路
     * @param nums
     * @return
     */
    public static int majorityElement(int[] nums) {

        //默认候选人为第一个元素
        int candidate = nums[0];
        //默认切换候选人的票数为  1
        int count = 1;

        for (int i = 1; i < nums.length; i++) {

            //若元素相同  票数+1
            if (nums[i] == candidate) {
                count++;
            }else if(count > 0){//若元素不相同  票数-1
                count--;
            }

            if (count == 0){//若元素票数为0  换候选人  重置票数
                candidate = nums[i];
                count = 1;
            }

        }
        return candidate;

    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值