LeetCode Challenge #1: Kids With the Greatest Number of Candies

LeetCode Challenge #1: Kids With the Greatest Number of Candies

Problem statement:

Given the array candies and the integer extraCandies, where candies[i] represents the number of candies that the ith kid has.

For each kid check if there is a way to distribute extraCandies among the kids such that he or she can have the greatest number of candies among them. Notice 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:

  • Kid 1 has 2 candies and if he or she receives all extra candies (3) will have 5 candies --- the greatest number of candies among the kids.
  • Kid 2 has 3 candies and if he or she receives at least 2 extra candies will have the greatest number of candies among the kids.
  • Kid 3 has 5 candies and this is already the greatest number of candies among the kids.
  • Kid 4 has 1 candy and even if he or she receives all extra candies will only have 4 candies.
  • Kid 5 has 3 candies and if he or she receives at least 2 extra candies will have the greatest number of candies 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, therefore only kid 1 will have the greatest number of candies among the kids regardless of who takes the extra candy.

Example 3:

Input: candies = [12,1,12], extraCandies = 10
Output: [true,false,true]

Step-by-Step Solution

Identify Patterns After reading the problem and examples, there are 2 things to notice:

  1. The problem output is a new list of Boolean variables.
  2. If candies[i]+extraCandies < greatest number in candies, then output[i] i= false, otherwise, output[i] = true.

Write the Pseudocode Observing these 2 things, the pseudocode will be executed as the following:

  1. Find the value of the greatest number in the candies array (let's call this variable 'max').
  2. Create an empty list called output to return the result.
  3. Add extraCandies to each element in candies array. If the sum of candies[i] and extraCandies is smaller than max, set output[i] to false. Else, output[i] is true.
  4. After going through all the elements in the candies array, return the list output.

Let's get coding! Now, let's write that pseudocode into Java code:

class Solution {
    public List<Boolean> kidsWithCandies(int[] candies, int extraCandies) {

        // Initialize maximum element 
         int max = candies[0]; 

         // Traverse array elem to find the highest number  
         for (int i = 1; i < candies.length; i++) 
             if (candies[i] > max) 
                 max = candies[i]; 

        //Initialize output list
        List<Boolean> output = new ArrayList<>(); 

        //Loop through each elem to set output[i] to true or false, depending on the sum of candies[i] and extraCandies
        for(int i =0; i<candies.length; i++){
            if(candies[i]+extraCandies<max){
                output.add(false);
            }else{
                output.add(true);
            }
        }

        //finally, return the output list
        return output;
    }
}

Conclusion

This is a good example of a easy difficulty question in LeetCode. For beginners, the only challenge is probably understanding what the question is asking for. A good tip is to look at the examples and see what the desired output is. Determine if it is a list, an array, and what type of variables it contains such as integers or boolean. Practice makes perfect so don't give up and keep trying! I hope this tutorial is helpful and stay tuned for more!

ย