对Codility演示测试感到困惑

时间:2011-01-04 22:12:42

标签: c# algorithm

我拿了Codility.com demo test

我的程序为其中一个单元测试返回了错误的值:

  

TEST   extreme_large_numbers   具有极大数字的序列测试算术溢出。

     

TIME   0.056秒。

     

RESULT   错误的答案   得到2,但它不是平衡点,总和[0..1] = 4294967294,总和[3..3] = - 2

好的,因为我最初在代码中看不到问题,所以我尝试在Visual Studio项目中运行它。然后编译器发现4294967294int来说太大了。它必须是uintlong。所以我将所有内容都更改为long,并且它在VS中工作。

但是,演示测试不允许您将函数输入/返回类型更改为long

  • 2,147,483,647(最大签名32位整数)
  • 4,294,967,294(由Codility.com单元测试给出的数字)

有人可以解释一下这个程序如何能够4294967294作为int[]中的一个数据值,}

alt text

2 个答案:

答案 0 :(得分:8)

在计算结果时,您只需要考虑大范围,最终结果不会超出范围。似乎你的解决方案效率不高,你可以在这个问题上达到线性运行时间。

编辑:您可以查看修订历史记录,查看快速运行且得分为100的代码; - )

答案 1 :(得分:0)

Swift 2.2版本的@Lurcero代码快速运行且得分为100:

public func solution(inout A : [Int]) -> Int {

let n = A.count

if n == 0 { return -1 }

if n == 1 { return 0 }

var right : Int64 = A.reduce(0, combine: +)

var left : Int64 = 0

for i in 0..<n {

    right -= A[i]

    if left == right {
        return i
    }
    left += A[i]
}

return -1
}