Java微信红包

这篇博客探讨了两种解决寻找数组中出现次数超过数组长度一半的元素的方法。第一种方法是通过排序找到中间元素,如果该元素出现次数超过n/2,则为答案。第二种方法使用哈希表存储每个元素及其出现次数,一旦发现某元素计数超过n/2,立即返回该元素。这两种策略展示了在数组处理中排序和哈希表的不同应用。
摘要由CSDN通过智能技术生成

在这里插入图片描述在这里插入图片描述

解题思路1:
先将数组排序, 如果存在某个红包金额出现的次数超过红包总数的一半, 那么这个金额数必定在数组的中间, 即mid
将这个数组遍历, 如果出现金额数和mid相等, 次数count++
判断如果次数count > n / 2, 说明这个金额数mid就是题目中所求红包得金额

import java.util.*;

public class Gift {
    public int getValue(int[] gifts, int n) {
        Arrays.sort(gifts);
        int mid = gifts[n / 2];
        int count = 0;
        for(int g : gifts){
            if(g == mid){
                count++;
            }
        }
        if(count > n / 2){
            return mid;
        }
        return 0;
    }
}

解题思路2:
利用哈希表进行存储

import java.util.*;

public class Gift {
    public int getValue(int[] gifts, int n) {
        Map<Integer, Integer> map = new HashMap<>();
        for(int g : gifts){
            if(map.containsKey(g)){
                map.put(g, map.get(g) + 1);
            }else{
                map.put(g, 1);
            }
            if(map.get(g) > n / 2){
                return g;
            }
        }
        return 0;
    }
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值