这是我参与8月更文挑战的第30天,活动详情查看:8月更文挑战
相关文章
LeetCode刷题汇总:LeetCode刷题
一、题目描述
给定一个偶数长度的数组,其中不同的数字代表着不同种类的糖果,每一个数字代表一个糖果。你需要把这些糖果平均分给一个弟弟和一个妹妹。返回妹妹可以获得的最大糖果的种类数。
从简单题目开始刷,锻炼自己的思维能力,为面试准备~
二、思路分析
-
看看题目的示例,我们来理一理这个思路~
-
示例 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],妹妹有两种不同的糖果,弟弟只有一种。这样使得妹妹可以获得的糖果种类数最多。
-
首先确定这个题目的意思。
-
糖果的数量肯定是偶数。
-
但是糖果的种类可不一定,也许有两个1糖果,一个2,一个3糖果。
-
这种情况下肯定需要给妹妹两种,因为妹妹需要最大种类的糖果。
-
坑踩完之后就可以想方法来写了。
-
如何找到唯一元素?
-
set!!!我们可以利用set来确定所有唯一元素。
-
最后计算set的大小即是糖果种类的数量。
-
要返回的值将再次由min(count,n/2) 给出。
-
min(count,n/2) 给定数值中最小的数。如果任一参数不能转换为数值,则返回
NaN
。
三、AC 代码
-
set破解法:
class Solution { public int distributeCandies(int[] candyType) { HashSet < Integer > set = new HashSet < > (); for (int candy: candyType) { set.add(candy); } return Math.min(set.size(), candyType.length / 2); } }
- 效率还是很高的呀
四、总结
路漫漫其修远兮,吾必将上下求索~
如果你认为i博主写的不错!写作不易,请点赞、关注、评论给博主一个鼓励吧~hahah