Swift 4.2 改进算法中的 "O" 成本

Swift 4.2 Improve the "O" cost in an algorithm

大家早上好,

我正在尝试使用 Swft 4.2 制作一个小算法,并尽可能降低成本 "O"

我的问题给出了我将传递给您的代码。如果大家有什么办法可以降低计算成本。

你要做的算法是:

我的代码如下:

import UIKit



class ViewController: UIViewController {



var arrayInts: [Int] = [2,3,4,5]

var arrayMultiplication: [Int] = []



override func viewDidLoad() {

    super.viewDidLoad()

    arrayMultiplication = arrayMultiplication(array: &arrayInts)

    print("\(arrayMultiplication)")

}



func arrayMultiplication(array: inout [Int])-> [Int]{

    var arrayMult:[Int] = []

    for i in 0...array.count - 1 {

        let remove = array.remove(at: i)

        let mult = array.reduce (1, {[=12=] * })

        arrayMult.append(mult)

        array.insert(remove, at: i)

    }

    return arrayMult

}
}

想法是降低这个算法的"O"。

谢谢

改进算法中的 "O" 成本

这是一个可能的解决方案。

var array = [2,3,4,5]

if let indexOf0 = array.firstIndex(of: 0) {
    array.remove(at: indexOf0)
    let product = array.reduce(1, *)
    var result = Array(repeating: 0, count: array.count + 1)
    result[indexOf0] = product
    print(result)
} else {
    let product = array.reduce(1, *)
    let result = array.map( {product/[=10=]} )
    print(result)
}
  • 如果数组中有0个,计算不为零的乘积,其他乘积全部设为0。(注:如果有1个以上的零,则每个元素都设为0。
  • 如果不是,则计算乘积并遍历数组一次,同时将乘积除以迭代元素并存储结果。

感谢@Hamish 指出疏忽。