微信红包

博客围绕牛客网的一道题目展开,题目要求找出春节微信红包金额数组中出现次数超过总数一半的金额,若没有则返回0。给出了输入输出描述和测试样例,基本思路是先对数组排序,再遍历数组计算红包个数,还提及了代码实现及在线oj运行结果。

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

牛客网做题链接:https://www.nowcoder.com/questionTerminal/fbcf95ed620f42a88be24eb2cd57ec54

题目描述

春节期间小明使用微信收到很多个红包,非常开心。在查看领取红包记录时发现,某个红包金额出现的次数超过了红包总数的一半。请帮小明找到该红包金额。写出具体算法思路和代码实现,要求算法尽可能高效。

输入输出描述

给定一个红包的金额数组gifts及它的大小n,请返回所求红包的金额。
若没有金额超过总数的一半,返回0。

测试样例

[1,2,3,2,2],5
2

基本思路
  1. 将红包数组排序:Arrays.sort(gifts);
  2. 遍历数组,计算红包个数。
代码实现
import java.util.*;

public class Gift {
    public int getValue(int[] gifts, int n) {
        int ret = gifts[0];    // 记录出现最大次数的红包金额
        int count = 0;    // 记录红包出现的次数
        // 对数组排序
        Arrays.sort(gifts);
        // 遍历数组找出现最多次的
        for(int i = 0; i < gifts.length; i++){
            // 统计同一金额的红包出现的次数
            if(ret == gifts[i]){
                count++;
            }
            // 不是同一金额
            else{
                // 计算上一金额红包所占个数,超过一半,直接返回结果
                if(count > n/2){
                    break;
                }
                else{
                    ret = gifts[i];
                    count = 1;
                }
            }
        }
        return count > n/2 ? ret : 0;
    }
}

在线oj运行结果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值