{x}
blog image

Kids With the Greatest Number of Candies

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

Solution Explanation

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.

Algorithm

  1. Find the maximum: Iterate through the candies array to find the maximum number of candies any kid possesses.

  2. Check each kid: Iterate through the candies array again. For each kid's candy count (candies[i]):

    • Add extraCandies to their current candy count.
    • Check if the resulting sum is greater than or equal to the maximum candy count found in step 1.
    • Store the result (true or false) in the result array.
  3. Return the result: Return the result array containing booleans indicating whether each kid can have the greatest number of candies.

Time and Space Complexity

  • 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).

Code Explanation (Python)

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.

Code Explanation (Other Languages)

The solutions in other languages follow a similar structure:

  1. Find the maximum: They use built-in functions like max_element (C++), Math.max (Java), or similar to find the maximum efficiently.

  2. 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.