Swift 4.2 Улучшение стоимости "O" в алгоритме - PullRequest
0 голосов
/ 31 октября 2018

Доброе утро всем,

Я пытаюсь сделать небольшой алгоритм с 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" в алгоритме

1 Ответ

0 голосов
/ 31 октября 2018

Вот возможное решение.

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 за указание на недосмотр.

...