which Kid that has most candles 算法题

which Kid that has most candies algorithm problem

我正在 leetcode 上解决这个问题:

给定一个数组 candies 和整数 extraCandies,其中 candies[i] 表示第 ith 个孩子拥有的糖果数量。 对于每个孩子,检查是否有办法在孩子中分配额外的糖果,以便他或她可以在他们中获得最多的糖果。请注意,多个孩子可以拥有最大数量的糖果。

示例 1:

解释:

我放了 console.log('true') & console.log('false') 这样我就可以在代码成功执行其功能时看到 true/false 打印。但它只打印一次 true

这是我的代码。请告诉我我错了什么或遗漏了什么:

const candies = [2, 3, 5, 1, 3]
const extraCandies = 3;

 

var kidsWithCandies = (candies, extraCandies) => {
 
  var max = candies.reduce(function(a, b) {
    return Math.max(a, b);
  });

  var min = candies.reduce(function(a, b) {
    return Math.min(a, b);
  });
  console.log(min)
  console.log(max)

  for (let i = 0; i < candies.length; i++) {
    if (candies[i] === max) {
      return true
    } else if (candies[i] = candies[i] + extraCandies < max) {
      return false
    } else if (candies[i] = candies[i] + extraCandies > max) {
      return true
    } else if (candies[i] === min) {
      //> max
      candies[i] = candies[i] + extraCandies
      if (candies[i] > max) {
        return true
      } else if (candies[i] < max) {
        return false
      }

    }
  };
}

这些将传入 Java脚本:

const kidsWithCandies = (candies, extraCandies) => {
    const maxCandies = Math.max(...candies);
    return candies.map(candy => candy + extraCandies >= maxCandies);
};

console.log(kidsWithCandies(candies = [2, 3, 5, 1, 3], extraCandies = 3))

const kidsWithCandies = (candies, extraCandies) => {
    let maxCandies = 0;
    const greatest = [];

    for (const candy of candies) {
        (candy > maxCandies) && (maxCandies = candy);
    }

    for (let index = 0; index < candies.length; ++index) {
        greatest.push(candies[index] + extraCandies >= maxCandies);
    }
    return greatest;
};

console.log(kidsWithCandies(candies = [4,2,1,1,2], extraCandies = 1))

Spread syntax (...) allows an iterable such as an array expression or string to be expanded in places where zero or more arguments (for function calls) or elements (for array literals) are expected, or an object expression to be expanded in places where zero or more key-value pairs (for object literals) are expected.

Python

class Solution:
    def kidsWithCandies(self, candies, extraCandies):
        max_candies = max(candies)
        return [candy + extraCandies >= max_candies for candy in candies]

Java

在 Java 中,我们将使用 Arrays.stream:

public final class Solution {
    public static final List<Boolean> kidsWithCandies(int[] candies, int extraCandies) {
        int maxCandies = Arrays.stream(candies).max().getAsInt();
        return Arrays.stream(candies).mapToObj(candy -> candy + extraCandies >= maxCandies).collect(Collectors.toList());
    }
}

运行时间是N阶


参考资料