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 }结论