Swift 4.2 改进算法中的 "O" 成本
Swift 4.2 Improve the "O" cost in an algorithm
大家早上好,
我正在尝试使用 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, {[=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 指出疏忽。
大家早上好,
我正在尝试使用 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, {[=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 指出疏忽。