Swift 3中的数组平衡点的公共函数

时间:2018-01-27 02:59:00

标签: arrays swift methods swift-playground

我能够使用Swift 3 Playgrounds找到阵列的平衡点。现在,我正在尝试创建一个循环数组并应用我的代码的方法(func)。这是Swift 3 Playgrounds的代码:

import Foundation

let myArray = [1, 2, 5, 8, 4, 4]
let divSum = myArray.reduce(0, {$0 + $1}) / 2
print (divSum)
var myBalancePoint = Int()

if myArray[0] + myArray[1] >= divSum {
    myBalancePoint = myArray[1]
} else {
    if myArray[0] + myArray[1] + myArray[2] >= divSum {
        myBalancePoint = myArray[2]
    } else {
        if myArray[0] + myArray[1] + myArray[2] + myArray[3] >= divSum {
            myBalancePoint = myArray[3]
        } else {
            if myArray[0] + myArray[1] + myArray[2] + myArray[3] + myArray[4] >= divSum {
                myBalancePoint = myArray[4]
            } else {
                if myArray[0] + myArray[1] + myArray[2] + myArray[3] + myArray[4] + myArray[5] >= divSum {
                    myBalancePoint = myArray[5]
                }
            }
        }
    }
}
print (myBalancePoint)

1 个答案:

答案 0 :(得分:1)

这是一个可能的实现:

func balancePoint(of a: [Int]) -> Int? {
    var leftSum = 0
    var rightSum = a.reduce(0, +)
    for (idx, elem) in a.enumerated() {
        rightSum -= elem
        if leftSum == rightSum {
            return idx
        }
        leftSum += elem
    }
    return nil
}

示例:

let myArray = [1, 2, 5, 8, 4, 4]
if let bp = balancePoint(of: myArray) {
    print("Balance point index:", bp, "Value:", myArray[bp])
} else {
    print("No balance point")
}

输出:

Balance point index: 3 Value: 8

它是如何工作的?

    var leftSum = 0
    var rightSum = a.reduce(0, +)

分别是当前元素左侧和右侧的所有元素的当前总和。

    for (idx, elem) in a.enumerated() {

遍历数组,将idx设置为当前索引 和elem到当前数组元素。

        rightSum -= elem
        if leftSum == rightSum {
            return idx
        }
        leftSum += elem

首先从正确的总和中减去当前元素。 如果左右总和相等,那么我们找到了平衡点。 否则,更新下一次迭代的左总和并继续。

    }
    return nil

未找到平衡点:返回nil