「这是我参与11月更文挑战的第 27 天,活动详情查看:2021最后一次更文挑战」
原题链接
1431. 拥有最多糖果的孩子 - 力扣(LeetCode) (leetcode-cn.com)
题目描述
给你一个数组 candies 和一个整数 extraCandies ,其中 candies[i] 代表第 i 个孩子拥有的糖果数目。
对每一个孩子,检查是否存在一种方案,将额外的 extraCandies 个糖果分配给孩子们之后,此孩子有 最多 的糖果。注意,允许有多个孩子同时拥有 最多 的糖果数目。
测试用例
示例 1:
输入:candies = [4,2,1,1,2], extraCandies = 1
输出:[true,false,false,false,false]
解释:只有 1 个额外糖果,所以不管额外糖果给谁,只有孩子 1 可以成为拥有糖果最多的孩子。
参数限制
- 2 <= candies.length <= 100
- 1 <= candies[i] <= 100
- 1 <= extraCandies <= 50
分析
现在有很多个孩子,他们手里的糖果数量各不相同,并且,我们有额外的 n 个糖果。对于每个孩子,需要我们判断,当这个孩子获取到额外的 n 个糖果时,他在这一群人中,是否是糖果最多的那个,需要返回 true/false。当存在有并列最大值的情况下,也需要返回 true
我们只需要关注,拥有糖果最多的那个,他手里的糖果数为 x。对于每个人而言,只需要判断自己当前的糖果数 y,保证 y + n ≥ x;换个描述,只需要判断自己当前手里的数量,不小于 x - n 即可
如果是前一种比较方案,在遍历的时候,在 当前值 + n ≥ 最大值 中会重复计算两个常量,把 n 提取到等式右边一次计算,后续直接比较来提高性能
代码
var kidsWithCandies = function(candies, extraCandies) {
let max = candies.reduce((a, b) => a > b ? a : b) - extraCandies;
for (let i = 0; i < candies.length; i++) {
candies[i] = candies[i] >= max ? true : false;
}
return candies;
};
由于题目并不要求传入数据保持一致,我们直接在遍历数组的时候,做原地修改,节省空间
今天的力扣刷题就分享到这里,感谢大家的阅读~