跳至主要內容

1431. 拥有最多糖果的孩子


1431. 拥有最多糖果的孩子

🟢   🔖  数组  🔗 力扣open in new window LeetCodeopen in new window

题目

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]istrueif, after giving theith kid all theextraCandies , they will have thegreatest number of candies among all the kids , orfalseotherwise.

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

解题思路

  1. 找到最大值

    • 使用 Math.max 找到 candies 数组中的最大值,这代表着目前最多的糖果数量。
  2. 判断每个孩子

    • 遍历 candies 数组,判断每个孩子在获得 extraCandies 后是否能达到或超过这个最大值。
  3. 返回结果

    • 使用 map 方法生成一个布尔数组,表示每个孩子是否能够拥有最多的糖果。

复杂度分析

  • 时间复杂度O(n),其中 ncandies 数组的长度,需要遍历一次数组来找到最大值,再遍历一次来生成结果。
  • 空间复杂度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);
};