首页 > 解决方案 > Swift 4.2 改进算法中的“O”成本

问题描述

大家,早安,

我正在尝试使用 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, {$0 * $1})

        arrayMult.append(mult)

        array.insert(remove, at: i)

    }

    return arrayMult

}
}

这个想法是降低这个算法的“O”。

谢谢

提高算法中的“O”成本

标签: swiftalgorithmmapreducereduce

解决方案


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

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/$0} )
    print(result)
}
  • 如果数组包含0,则计算不为零的乘积并将所有其他乘积设置为0。(注意:如果零大于1,则每个元素都设置为零。
  • 如果不是,则计算乘积并遍历数组一次,同时将乘积除以迭代元素并存储结果。

感谢@Hamish 指出疏忽。


推荐阅读