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
When you get asked this question in a real-life environment, it will often be ambiguous (especially at FAANG). Make sure to ask these questions in that case:
The brute force way to solve this problem is to give each kid the extra candies, one kid at a time. Then, check if that kid now has the most candies compared to everyone else. We repeat this process for every kid.
Here's how the algorithm would work step-by-step:
def kids_with_candies(candies, extra_candies):
results = []
for current_kid_index in range(len(candies)):
# Simulate giving the current kid the extra candies.
current_kid_candies = candies[current_kid_index] + extra_candies
is_greatest = True
# Compare the current kid's candies to every other kid.
for other_kid_index in range(len(candies)):
if current_kid_candies < candies[other_kid_index]:
is_greatest = False
break
results.append(is_greatest)
return results
The optimal approach finds the largest number of candies any kid has. Then, it checks each kid to see if they could have the greatest number if they got the extra candies. We can determine this with a single comparison per kid, based on the max candies.
Here's how the algorithm would work step-by-step:
def kids_with_candies(
candies: list[int], extra_candies: int
) -> list[bool]:
# Find the maximum number of candies any kid has.
max_candies = max(candies)
result = []
for current_candies in candies:
# Check if the kid could have the most candies.
if current_candies + extra_candies >= max_candies:
result.append(True)
else:
result.append(False)
return result
Case | How to Handle |
---|---|
Empty candies array | Return an empty boolean array since there are no kids to evaluate. |
Null candies array | Throw an IllegalArgumentException or return null to indicate invalid input, depending on the language and requirements. |
extraCandies is zero | The result is a boolean array indicating which kids initially have the maximum number of candies. |
Single kid in candies array | Return an array containing only 'true' since the single kid will always have the greatest number of candies. |
All kids have the same number of candies | Return an array with all 'true' values since adding extraCandies to any kid will make them the greatest. |
extraCandies is very large | Ensure that the sum of candies[i] and extraCandies does not result in integer overflow during comparison. |
candies array contains very large numbers | Ensure that the maximum value calculation does not result in integer overflow. |
Large candies array size | Iterate through the array efficiently to calculate the maximum and perform the boolean checks, avoiding unnecessary computations or memory allocations. |