内容简介:题目来源于 LeetCode 上第 575 号问题:分糖果。题目难度为 Easy,目前通过率为 60.2% 。给定一个偶数长度的数组,其中不同的数字代表着不同种类的糖果,每一个数字代表一个糖果。你需要把这些糖果平均分给一个弟弟和一个妹妹。返回妹妹可以获得的最大糖果的种类数。输入: candies = [1,1,2,2,3,3] 输出: 3 解析: 一共有三种种类的糖果,每一种都有两个。 最优分配方案:妹妹获得[1,2,3],弟弟也获得[1,2,3]。这样使妹妹获得糖果的种类数最多。
题目来源于 LeetCode 上第 575 号问题:分糖果。题目难度为 Easy,目前通过率为 60.2% 。
题目描述
给定一个偶数长度的数组,其中不同的数字代表着不同种类的糖果,每一个数字代表一个糖果。你需要把这些糖果平均分给一个弟弟和一个妹妹。返回妹妹可以获得的最大糖果的种类数。
示例 1:
输入: candies = [1,1,2,2,3,3] 输出: 3 解析: 一共有三种种类的糖果,每一种都有两个。 最优分配方案:妹妹获得[1,2,3],弟弟也获得[1,2,3]。这样使妹妹获得糖果的种类数最多。
示例 2 :
输入: candies = [1,1,2,3] 输出: 2 解析: 妹妹获得糖果[2,3],弟弟获得糖果[1,1],妹妹有两种不同的糖果,弟弟只有一种。这样使得妹妹可以获得的糖果种类数最多。 注意:
数组的长度为[2, 10,000],并且确定为偶数。
数组中数字的大小在范围[-100,000, 100,000]内。
题目解析
总共有 n 个糖,平均分给两个人,每人得到 n/2 块糖,那么能拿到的最大的糖的种类数也就是 n/2 种,不可能更多,只可能更少。
所以只需要统计出糖的种类数,如果糖的种类数小于 n/2,说明拿不到 n/2种糖,最多能拿到的种类数就是当前糖的总种类数。最后,看(数量的一半)和(所有的种类)哪个先达到,取两者中较小的值即可。
举个例子:
极端情况1:所有糖都不重样,这种情况妹妹也只能拿到一半的糖果。
极端情况2:只有一种糖,这种情况妹妹只能得到一种糖果。
平均情况:每个糖都有两个,这种情况妹妹可以拿到所有种类,数量与 极端情况1 一样。
求糖果的种类数使用 hash 即可。
动画描述
代码实现
class Solution { public int distributeCandies(int[] candies) { Set<Integer> nums = new HashSet<>(); for (int i = 0; i < candies.length; i++) { nums.add(candies[i]); } int numNums = nums.size(); int numTarget = candies.length / 2; return numNums >= numTarget ? numTarget : numNums; } } 复制代码
END
如果你觉得这篇内容对你挺有启发,那么你可以:
1、点赞,让更多的人也能看到这篇内容(收藏不点赞,都是耍流氓 -_-)
2、 关注我 ,让我们成为长期关系。
3、关注公众号「五分钟学算法」,里面已有 150 多篇与算法有关原创文章。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 【LeetCode】贪心算法--分发糖果(135)
- 【Leetcode】135.分发糖果
- 如何在AI中创建糖果怪物
- 第五届蓝桥杯Java B——分糖果
- 通俗易懂--决策树算法、随机森林算法讲解(算法+案例)
- 限流算法之漏桶算法、令牌桶算法
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Spring Into HTML and CSS
Molly E. Holzschlag / Addison-Wesley Professional / 2005-5-2 / USD 34.99
The fastest route to true HTML/CSS mastery! Need to build a web site? Or update one? Or just create some effective new web content? Maybe you just need to update your skills, do the job better. Welco......一起来看看 《Spring Into HTML and CSS》 这本书的介绍吧!