1431. 拥有最多糖果的孩子
1431. 拥有最多糖果的孩子
题目
There are n
kids with candies. You are given an integer array candies
, where each candies[i]
represents the number of candies the ith
kid has, and an integer extraCandies
, denoting the number of extra candies that you have.
Return a boolean arrayresult
of lengthn
, whereresult[i]
istrue
if, after giving theith
kid all theextraCandies
, they will have thegreatest number of candies among all the kids , orfalse
otherwise.
Note that multiple kids can have the greatest number of candies.
Example 1:
Input: candies = [2,3,5,1,3], extraCandies = 3
Output: [true,true,true,false,true]
Explanation: If you give all extraCandies to:
- Kid 1, they will have 2 + 3 = 5 candies, which is the greatest among the kids.
- Kid 2, they will have 3 + 3 = 6 candies, which is the greatest among the kids.
- Kid 3, they will have 5 + 3 = 8 candies, which is the greatest among the kids.
- Kid 4, they will have 1 + 3 = 4 candies, which is not the greatest among the kids.
- Kid 5, they will have 3 + 3 = 6 candies, which is the greatest among the kids.
Example 2:
Input: candies = [4,2,1,1,2], extraCandies = 1
Output: [true,false,false,false,false]
Explanation: There is only 1 extra candy.
Kid 1 will always have the greatest number of candies, even if a different kid is given the extra candy.
Example 3:
Input: candies = [12,1,12], extraCandies = 10
Output: [true,false,true]
Constraints:
n == candies.length
2 <= n <= 100
1 <= candies[i] <= 100
1 <= extraCandies <= 50
题目大意
有 n
个有糖果的孩子。给你一个数组 candies
,其中 candies[i]
代表第 i
个孩子拥有的糖果数目,和一个整数 extraCandies
表示你所有的额外糖果的数量。
返回一个长度为 n
的布尔数组 result
,如果把所有的 extraCandies
给第 i
个孩子之后,他会拥有所有孩子中 **最多 **的糖果,那么 result[i]
为 true
,否则为 false
。
注意,允许有多个孩子同时拥有 最多 的糖果数目。
示例 1:
输入: candies = [2,3,5,1,3], extraCandies = 3
输出:[true,true,true,false,true]
解释: 如果你把额外的糖果全部给:
孩子 1,将有 2 + 3 = 5 个糖果,是孩子中最多的。
孩子 2,将有 3 + 3 = 6 个糖果,是孩子中最多的。
孩子 3,将有 5 + 3 = 8 个糖果,是孩子中最多的。
孩子 4,将有 1 + 3 = 4 个糖果,不是孩子中最多的。
孩子 5,将有 3 + 3 = 6 个糖果,是孩子中最多的。
示例 2:
输入: candies = [4,2,1,1,2], extraCandies = 1
输出:[true,false,false,false,false]
解释: 只有 1 个额外糖果,所以不管额外糖果给谁,只有孩子 1 可以成为拥有糖果最多的孩子。
示例 3:
输入: candies = [12,1,12], extraCandies = 10
输出:[true,false,true]
提示:
n == candies.length
2 <= n <= 100
1 <= candies[i] <= 100
1 <= extraCandies <= 50
解题思路
找到最大值:
- 使用
Math.max
找到candies
数组中的最大值,这代表着目前最多的糖果数量。
- 使用
判断每个孩子:
- 遍历
candies
数组,判断每个孩子在获得extraCandies
后是否能达到或超过这个最大值。
- 遍历
返回结果:
- 使用
map
方法生成一个布尔数组,表示每个孩子是否能够拥有最多的糖果。
- 使用
复杂度分析
- 时间复杂度:
O(n)
,其中n
是candies
数组的长度,需要遍历一次数组来找到最大值,再遍历一次来生成结果。 - 空间复杂度:
O(n)
,用于存储最终的布尔数组。
代码
/**
* @param {number[]} candies
* @param {number} extraCandies
* @return {boolean[]}
*/
var kidsWithCandies = function (candies, extraCandies) {
// 找到最大值
const most = Math.max(...candies);
// 判断每个孩子获得 extraCandies 后是否能达到或超过最大值
return candies.map((i) => i + extraCandies >= most);
};