Kids With the Greatest Number of Candies - LeetCode

https://leetcode.com/problems/kids-with-the-greatest-number-of-candies/?envType=study-plan-v2&envId=leetcode-75

LeetCode_Sharing.png

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:

Output: [true,false,true]

Constraints:

  • n == candies.length
  • 2 <= n <= 100
  • 1 <= candies[i] <= 100
  • 1 <= extraCandies <= 50

解析

每个kid有一定数量的糖果,将extra candies分别给到每一个kid,如果变成拥有最多的那个,返回true,否则是false。

class Solution:
    def kidsWithCandies(self, candies: List[int], extraCandies: int) -> List[bool]:
        result = []
        for i in range(len(candies)):
            temp = candies.copy()
            temp[i] += extraCandies
            if max(temp) == temp[i]:
                result.append(True)
            else:
                result.append(False)

        return result
class Solution {
    public List<Boolean> kidsWithCandies(int[] candies, int extraCandies) {
        List<Boolean> result = new ArrayList<>();
        int max = 0;
        for (int i = 0; i < candies.length; i++){
            int[] temp = candies.clone();
            temp[i] += extraCandies;
            max = temp[0];
            for (int j = 1;j < temp.length; j++) {
                if (temp[j] > max) {
                    max = temp[j];
                }
            }
            if (max == temp[i]){
                result.add(true);
            }
            else {
                result.add(false);
            }
        }
        return result;
    }
}
class Solution {
public:
    vector<bool> kidsWithCandies(vector<int>& candies, int extraCandies) {
        vector<bool> result;
        int maxCandy = 0;
        for (int candy : candies){
            maxCandy = max(candy + extraCandies, candies);
        }
        for (int candy : candies){
            result.push_back(candy + extraCandies >= maxCandy);
        }
        return result;
    }
private:
    int max(int t, vector<int> candies){
        int max = candies[0];
        for (int i = 1; i < candies.size(); ++i) {
            if (candies[i] > max){
                max = candies[i];
            }
        }
        return max;
    }
};

最后看来,有值就可以,C++version就不错,没必要去clone或者copy。