【力扣刷题】1431. 拥有最多糖果的孩子【数组原地更新】

183 阅读1分钟

「这是我参与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;
};

image.png

由于题目并不要求传入数据保持一致,我们直接在遍历数组的时候,做原地修改,节省空间


今天的力扣刷题就分享到这里,感谢大家的阅读~