Javascript 中的 Codility MinAbsSumOfTwo

问题描述 投票:0回答:3

我一直在努力应对来自 Codility 的挑战,我不明白为什么

MinAbsSumOfTwo
挑战在 C# 中可以使用相同的算法,但在 Javascript 中却不起作用。

这里是 JS 实现结果页面的链接 (54/100)。

这里是 C# 实现结果页面的链接 (100/100)。

我尝试在我的机器中模拟

extreme_large
arithmetic_medium
测试,但两者都给了我预期的结果:

  it('should return 1002 for arithmetic medium', () =>
  {
    const arithmetic = []
    let value = -5010000

    for(let i = 0; i < 10000; i++)
      arithmetic.push(value += 1002)

    assert.equal(solution(arithmetic), 1002)
  })

  it('should return 1999999994 for sequence of MAX_INT', () =>
  {
    const maxIntSequence = []

    for(let i = 0; i < 100000; i++)
      maxIntSequence.push(999999997)

    assert.equal(solution(maxIntSequence), 1999999994)
  })

如果有人能提供帮助,我真的很感激!

javascript
3个回答
1
投票

您的

absOrder
方法无效;
Array.sort
希望比较器函数返回一个数字,而不是布尔值:

A.sort((a,b) => Math.abs(a) - Math.abs(b))

0
投票
            function solution(A) {
                // write your code in JavaScript (Node.js 8.9.4)
                var min =+Infinity,sum;
                for(var i =0 ;i< A.length ;i++){
                    for(var j=0 ;j< A.length ;j++){
                        if(i > j) continue;
                        sum = Math.abs(A[i] + A[j]);
                        min = Math.min(sum,min);
                    }
                }
                return min;
            }

0
投票

let min = Math.abs(A[0]*2)

这是错误的,对于像 [1, 5] 这样的测试用例,代码将失败并返回 2。

应该是这样的

let min = Number.MAX_SAFE_INTEGER

© www.soinside.com 2019 - 2024. All rights reserved.