我的程序为其中一个单元测试返回了错误的值:
TEST extreme_large_numbers 具有极大数字的序列测试算术溢出。
TIME 0.056秒。
RESULT 错误的答案 得到2,但它不是平衡点,总和[0..1] = 4294967294,总和[3..3] = - 2
好的,因为我最初在代码中看不到问题,所以我尝试在Visual Studio项目中运行它。然后编译器发现4294967294
对int
来说太大了。它必须是uint
或long
。所以我将所有内容都更改为long
,并且它在VS中工作。
但是,演示测试不允许您将函数输入/返回类型更改为long
。
有人可以解释一下这个程序如何能够4294967294
作为int[]
中的一个数据值,1>}
答案 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
}