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 array result
of length n
, where result[i]
is true
if, after giving the ith
kid all the extraCandies
, they will have the greatest number of candies among all the kids, or false
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
This problem asks whether each kid will have the greatest number of candies after receiving extraCandies
. The straightforward approach involves finding the maximum number of candies among all kids and then checking if each kid's candy count plus extraCandies
is greater than or equal to this maximum.
Find the maximum: Iterate through the candies
array to find the maximum number of candies any kid possesses.
Check each kid: Iterate through the candies
array again. For each kid's candy count (candies[i]
):
extraCandies
to their current candy count.result
array.Return the result: Return the result
array containing booleans indicating whether each kid can have the greatest number of candies.
Time Complexity: O(N), where N is the number of kids (length of the candies
array). We iterate through the array twice: once to find the maximum and once to check each kid.
Space Complexity: O(N) in most languages. We create a new array (result
) of size N to store the boolean results. In some languages (like Python), the list comprehension might have slightly better space efficiency, but it's still effectively O(N).
The Python solution uses a concise list comprehension for efficiency:
class Solution:
def kidsWithCandies(self, candies: List[int], extraCandies: int) -> List[bool]:
mx = max(candies) # Find the maximum number of candies
return [candy + extraCandies >= mx for candy in candies] #List comprehension doing the check for each kid
The max(candies)
function efficiently finds the maximum value in the list. The list comprehension iterates through each candy
in candies
, adds extraCandies
, compares it to mx
, and directly creates the boolean result list.
The solutions in other languages follow a similar structure:
Find the maximum: They use built-in functions like max_element
(C++), Math.max
(Java), or similar to find the maximum efficiently.
Iterate and check: They iterate through the candies
array, perform the addition, comparison, and store the boolean results in a list or array.
The core logic remains consistent across all languages, making use of efficient built-in functions for finding the maximum and performing element-wise operations. The primary difference lies in the syntax and data structure usage specific to each programming language.