swift - Swift 4.2 改进算法中的“O”成本
问题描述
大家,早安,
我正在尝试使用 Swft 4.2 制作一个小算法,并尽可能降低成本“O”
我的问题是我将传递给您的代码。如果您有任何方法可以提高计算成本。
你需要做的算法是:
- 数组 [Int] 被传递给“arrayMultiplication”函数。假设它是 [2,3,4,5]
- 我们将不得不将每个位置的所有元素相乘,除了相同的元素。在这种情况下,它将是: [3x4x5, 2x4x5, 2x3x5, 2x3x4] = [60, 40, 30, 24]
我的代码如下:
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”成本
解决方案
这是一个可能的解决方案。
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 指出疏忽。
推荐阅读
- c# - WPF 设计器问题:XDG0008 名称“NumericTextBoxConvertor”在命名空间“clr-namespace:PulserTester.Convertors”中不存在
- php - WooCommerce:如何在订单元数据对象中获取具有自定义 ID 的订单?
- java - 硒问题,帮我解决这个问题
- azure - AADSTS75005:请求不是有效的 Saml2 协议消息。
- python - 我将自定义语言添加到我的语言列表中
- java - 具有 CompletableFuture 的非阻塞异步 Jersey JAX-RS
- postgresql - Postgresql 临时文件:设备上没有剩余空间,临时文件的位置
- com - 需要重新启动时不会发生自注册
- javascript - ES6 - IE 11 的模板字符串破解
- r - dateRangeInput R 闪亮控件对齐