【发布时间】:2016-07-29 09:36:19
【问题描述】:
关于大输入数据的高阶 swift 函数的效率的快速问题。在最近的一次测试中,我有一个关于在数组中查找“平衡索引”的问题——即数组的索引,其中索引下方所有元素的总和等于索引上方所有元素的总和
这个数组的平衡索引是任意整数 P 使得 0 ≤ P
A[0] + A[1] + ... + A[P−1] = A[P+1] + ... + A[N−2] + A[N−1].
挑战是编写一个简短的函数来计算第一个(或任何)被认为是“平衡”的索引。 我整理了一个简单的 sn-p,它得分很高,但在一些使用大型输入数据(数组大小约为 100,000)的“性能”测试中失败了。
这是代码
public func solution(inout A : [Int]) -> Int {
var index = 0;
for _ in A {
let sumBefore = A[0...index].reduce(0) { $0 + $1 }
let sumAfter = A[index...A.count-1].reduce(0) { $0 + $1 }
if (sumBefore == sumAfter) { return index; }
index += 1;
}
return -1;
}
谁能解释一下为什么代码在处理大量数据或任何推荐的替代方案时表现如此糟糕?
例如,这里是对性能测试失败的描述:
大型性能测试,O(n^2) 解决方案应该失败。
✘ 超时错误 运行时间:>6.00 秒,时限:0.22 秒。
【问题讨论】:
标签: arrays swift algorithm performance