【问题标题】:leetcode algorithm edgecase issueleetcode算法边缘问题
【发布时间】:2020-09-04 01:01:35
【问题描述】:

我正在做以下问题:

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

为每个孩子检查是否有办法在他们之间分配额外的糖果 孩子们,这样他或她就可以拥有最多数量的糖果 其中。请注意,多个孩子可以拥有最多的 糖果。

示例 1:

输入:candies = [2,3,5,1,3], extraCandies = 3 输出: [true,true,true,false,true] 解释:孩子 1 有 2 颗糖果,如果 他或她收到所有额外的糖果 (3) 将有 5 个糖果 --- 孩子们中糖果的数量最多。孩子 2 有 3 颗糖果,如果 他或她收到至少 2 个额外的糖果将拥有最大的 孩子们的糖果数量。孩子 3 有 5 个糖果,这是 已经是孩子们中糖果数量最多的。孩子 4 有 1 糖果,即使他或她收到所有额外的糖果,也只会 4颗糖果。孩子 5 有 3 个糖果,如果他或她至少收到 2 个 额外的糖果将在孩子们中拥有最多的糖果。 示例 2:

输入:candies = [4,2,1,1,2], extraCandies = 1 输出: [true,false,false,false,false] 解释:只有 1 个额外的 糖果,因此只有孩子 1 拥有最多的糖果 在孩子们中间,不管谁拿了多余的糖果。示例 3:

输入:candies = [12,1,12], extraCandies = 10 输出: [真,假,真]

约束:

2

这是我的代码,在我的代码下方是我得到的错误,但看起来是对的?

const kidsWithCandies = (candies, extraCandies) => {
    let candiesTwo = [...candies]
    candiesTwo = candiesTwo.sort()
    
    let arr = []
    let highestNum = candiesTwo[candiesTwo.length -1]
    
    for(let i = 0; i < candies.length; i++) { 
        if(candies[i] + extraCandies >= highestNum) { 
            arr.push(true)
        }  else { 
          arr.push(false)
        }
    }
    return arr
}

我得到了

71 / 103 test cases passed.
Status: Wrong Answer
Submitted: 3 minutes ago
Input:
[1,10,10,3]
1
Output:
[false,true,true,true]
Expected:
[false,true,true,false]

【问题讨论】:

    标签: javascript arrays algorithm


    【解决方案1】:

    默认排序方法按字母顺序对项目进行排序。 你应该更新

    candiesTwo = candiesTwo.sort()
    

    candiesTwo.sort((a, b) => a-b);
    

    用于数字排序。

    【讨论】:

    • 或者使用 Math.max(...candies) 来查找最大数量,但是您在上面的解决方案中指出了实际问题。
    • 谢谢。这对于未来来说绝对是一件好事。我也通过使用 Math.max(...candies) 解决了它
    • Math.max(...candies) 在大多数情况下都可以正常工作。但是在像糖果长度非常大的边缘情况下,它不会起作用。当然对于这个问题没关系(
    【解决方案2】:

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

    简单示例

    const candies = [4, 11, 22, 2, 1];
    
    console.log('No compare function:', JSON.stringify([...candies].sort()))
    
    candies.sort((a, b) => a - b);
    console.log('With compare function:', JSON.stringify(candies))

    【讨论】:

      【解决方案3】:

      如果我们使用sort,时间复杂度将是N Log N 的数量级。这是O(N) 解决方案:

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

      【讨论】:

        猜你喜欢
        • 2011-09-15
        • 2013-10-20
        • 2018-10-04
        • 2021-01-09
        • 1970-01-01
        • 2018-04-16
        • 2012-07-14
        • 2018-04-10
        • 2021-12-27
        相关资源
        最近更新 更多