真心求大家关注和点赞,原创不易,你们的支持是我写作的最大动力!
题目描述
题目讲了个故事:有个叫爱丽斯的小姑娘有 n 颗糖,第 i 颗糖的类型是 candyType[i],然后小姑娘发现自己胖了,去看了医生。医生建议她最多只能吃 n/2 颗糖,不然体重就控制不住啦(医生啊,你建议她别吃糖不就没这么多事儿了嘛~),n 总是偶数,放心做除法吧。但是爱丽斯又非常喜欢吃糖,可又要听从医生建议,不然体重就控制不住了,所以她想知道自己最多能吃到多少种糖。
已知长度为 n 的整数数组 candyType,在听从医生建议下(最多吃 n/2 颗糖),爱丽斯最多能吃到多少种糖。
例一:
输入: candyType = [1,1,2,2,3,3]
输出: 3
解释: 吃糖总数为 6/2=3,正好这儿有三种类型的糖,所以她可以每样都吃一颗
例二:
输入: candyType = [1,1,2,3]
输出: 2
Explanation: 吃糖总数为 4/2=2,吃 [1,2]、[1,3]、[2,3] 都一样,所以她最多可以吃 2 种糖
例三:
输入: candyType = [6,6,6,6]
输出: 1
解释: 吃糖总数为 4/2=2,即使她吃 2 颗糖,但最多只能吃一种类型
思路分析
读完题后,我们发现
糖的类型总数很关键,最多能吃到糖的种类肯定小于等于这个值。- 影响结果的因素有两个:吃糖的数量,总类型数。
吃糖的数量题目告诉我们了,是 n/2,因为 n 为偶数,所以不用担心结果为小数的情况。剩下就是类型数的问题,细品后发现,这道题其实考我们的是数组去重啊!数组去重对大家来说简直就是家常便饭,熟悉的不能再熟悉的问题了。
由于数组去重解法比较多,我这里就不罗列了,对其他答案感兴趣的同学可以在评论区给出你的思路!
AC 代码
var distributeCandies = function (candyType) {
const types = new Set(candyType).size;
const total = candyType.length / 2;
return total >= types ? types : total;
};
总结
这道题做下来有点在做小学初中数学题的感觉,特点是:讲故事、题目长、纸老虎、转移注意力,其实考察的都是大家非常熟悉的点,在做题时不要被这种表面的东西迷惑双眼!
本文正在参与「掘金 2021 春招闯关活动」, 点击查看 活动详情