575. Distribute Candies-分糖果问题

本文介绍了一道LeetCode上的编程题目“分糖果”,并使用Java语言提供了详细的解决方案。通过使用HashSet去重获取糖果种类总数,进而确定妹妹能够获得的糖果种类的最大值。

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

说实话,自己非常讨厌刷题,而且对算法这方面不太感兴趣,只怪本科的时候玩的太多了,没有好好学习,学不会数据结构和算法,才导致今天特别讨厌算法。但是。。。。。我还是注册了LeetCode,开始看看有没有简单容易的、适合自己的题做做。

今天看到了575这道题,大意如下:

一个整数数组,长度为偶数,里面的不同的数字代表了不同的糖果,而每一个数字代表了对应种类糖果中的一个。现在你要开始分糖果了,但是弟弟和妹妹得到的糖果数量必须是一样的(每人一半,这也解释了为什么数组长度是偶数。如果不是偶数,你吃一个,剩下的给弟弟妹妹们分了吧,哈哈),求妹妹能分到的糖果的种类的最大值。

下面是官方给出的两个例子以及解释:

因为平时Java用的比较多,所以我用Java解决了这个问题。

首先,我用一个HashSet进行去重,得到总的糖果种类数。

 Set<Integer> set = new HashSet<Integer>();
 for(int i=0; i<candies.length;i++)
 {
     set.add(candies[i]);
 }

第二步,我获取糖果的总数量,并除以2(因为是两个人分,所以这里是获取每个人能分到的糖果数量)。

int n = candies.length/2;

第三步,也就是这道题的核心所在。比较糖果的种类数和每个人分到的糖果数之间的关系。

如果种类数比每个人能分到的糖果数小,肯定每个种类都重复了很多,把每个种类的糖果都给妹妹一份,然后还要继续把剩下的再分给妹妹几个才能达到n。

if(set.size() < n)
{
    return set.size();
}

如果种类数比每个人能分到的糖果数都大,那毫无疑问,只要在set.size()种糖果中选出来n种给妹妹就行了,此时得到的种类数的值最大

else
{
     return n;
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值