Javascript leetcode算法边缘问题

Javascript leetcode算法边缘问题,javascript,arrays,algorithm,Javascript,Arrays,Algorithm,我正在解决以下问题: 给定数组candies和整数extraCandies,其中candies[i] 表示第i个孩子拥有的糖果数量 对于每个孩子,检查是否有办法在他们之间分配课外活动 让孩子们吃最多的糖果 其中,。请注意,多个孩子可以拥有最多的 糖果 例1: 输入:糖果=[2,3,5,1,3],课外食品=3输出: [对,对,对,错,对]解释:孩子1有两个糖果,如果 他或她收到所有额外的糖果3将有5糖果 孩子们吃的糖果最多。孩子2有3个糖果,如果 他或她收到至少两个额外的糖果将有最大的收获 孩子们

我正在解决以下问题:

给定数组candies和整数extraCandies,其中candies[i] 表示第i个孩子拥有的糖果数量

对于每个孩子,检查是否有办法在他们之间分配课外活动 让孩子们吃最多的糖果 其中,。请注意,多个孩子可以拥有最多的 糖果

例1:

输入:糖果=[2,3,5,1,3],课外食品=3输出: [对,对,对,错,对]解释:孩子1有两个糖果,如果 他或她收到所有额外的糖果3将有5糖果 孩子们吃的糖果最多。孩子2有3个糖果,如果 他或她收到至少两个额外的糖果将有最大的收获 孩子们的糖果数量。孩子3有5个糖果,这是 已经是孩子们中糖果数量最多的。孩子4有1个 糖果,即使他或她收到了所有额外的糖果,他或她也只有 4块糖果。孩子5有3个糖果,如果他或她收到至少2个 在孩子们中,额外的糖果会有最多的糖果。 例2:

输入:糖果=[4,2,1,1,2],课外食品=1输出: [真,假,假,假,假]解释:只有一个额外的 糖果,因此只有孩子1会有最多的糖果 在孩子们中间,不管谁拿了额外的糖果。例3:

输入:糖果=[12,1,12],外卖=10输出: [对,错,对]

限制条件:


2默认情况下,排序方法按字母顺序对项目进行排序。 您应该从

candiesTwo = candiesTwo.sort()


用于数字排序。

默认情况下,排序方法按字母顺序对项目进行排序。 您应该从

candiesTwo = candiesTwo.sort()


用于数字排序。

使用比较功能对数字进行排序,否则它们将按字母顺序排序。默认情况下,sort方法按字母顺序和升序将值作为字符串进行排序

简单例子

常量糖果=[4,11,22,2,1]; console.log'No compare function:',JSON.stringify[…candies].sort candies.sorta,b=>a-b;
console.log'With compare function:',JSON.stringifycandies使用比较函数对数字排序,否则它们将按字母顺序排序。默认情况下,sort方法按字母顺序和升序将值作为字符串进行排序

简单例子

常量糖果=[4,11,22,2,1]; console.log'No compare function:',JSON.stringify[…candies].sort candies.sorta,b=>a-b; console.log'With compare function:',JSON.stringifycandies如果我们使用sort,时间复杂度将为N log N。下面是一个ON解决方案:

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;
};
如果我们使用sort,时间复杂度将为N Log N。下面是一个ON解决方案:

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;
};

或者使用Math.max…candies来计算最大值,不过您在上面的解决方案中指出了实际问题。谢谢。这绝对是很好的未来知道。我也用数学解决了这个问题。max…candiesMath。max…candies在大多数情况下都很好用。但在边缘的情况下,如糖果的长度非常大,这将不起作用。当然,对于这个问题,可以使用Math.max…candies找到最大值,但是您在上面的解决方案中指出了实际问题。谢谢。这绝对是很好的未来知道。我也用数学解决了这个问题。max…candiesMath。max…candies在大多数情况下都很好用。但在边缘的情况下,如糖果的长度非常大,这将不起作用。当然,这个问题没问题
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;
};