闽公网安备 35020302035485号
func sumUsingForIn(n: Int) -> Int {
//堆代码 duidaima.com
var sum = 0
for i in 1...n {
sum += i
}
return sum
}
Reduce 方法func sumUsingReduce(n: Int) -> Int {
return (1...n).reduce(0, +)
}
高斯公式func sumUsingGauss(n: Int) -> Int {
return n * (n + 1) / 2
}
即:
import Foundation
func measureExecutionTime(for function: (Int) -> Int, with n: Int) {
let start = DispatchTime.now()
_ = function(n)
let end = DispatchTime.now()
let nanoTime = end.uptimeNanoseconds - start.uptimeNanoseconds
let timeInterval = Double(nanoTime) / 1_000_000// 转换为毫秒
print("Execution time: \(timeInterval) ms")
}
// 测试每个函数
measureExecutionTime(for: sumUsingForIn, with: 1_000_000)
measureExecutionTime(for: sumUsingReduce, with: 1_000_000)
measureExecutionTime(for: sumUsingGauss, with: 1_000_000)
大家可以自行运行上面的代码,看看结果。我这里的结果为:Execution time: 2976.284459 ms Execution time: 168.619834 ms Execution time: 0.019208 ms谁是最快的?
O(n²): 平方时间,执行时间随_n_成平方增长。
func cumulativeScoreLoop(scores: [Int], upto level: Int) -> Int {
var total = 0
for i in 0..<min(level, scores.count) {
total += scores[i]
}
return total
}
Reduce实现(函数式方法)func cumulativeScoreReduce(scores: [Int], upto level: Int) -> Int {
return scores.prefix(level).reduce(0, +)
}
高斯公式实现(优化方法)func cumulativeScoreGaussFormula(upto level: Int) -> Int {
return (level * (level + 1)) / 2
}
结论