public Swift 中数组平衡点的函数 3
public func for Array Balancing Point in Swift 3
我能够使用 Swift 3 个游乐场找到阵列的平衡点。现在,我正在尝试创建一个方法 (func),它将循环遍历数组并应用我的代码。这是我来自 Swift 3 Playgrounds 的代码:
import Foundation
let myArray = [1, 2, 5, 8, 4, 4]
let divSum = myArray.reduce(0, {[=12=] + }) / 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)
这是一个可能的实现:
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
未找到平衡点:return nil
.
我能够使用 Swift 3 个游乐场找到阵列的平衡点。现在,我正在尝试创建一个方法 (func),它将循环遍历数组并应用我的代码。这是我来自 Swift 3 Playgrounds 的代码:
import Foundation
let myArray = [1, 2, 5, 8, 4, 4]
let divSum = myArray.reduce(0, {[=12=] + }) / 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)
这是一个可能的实现:
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
未找到平衡点:return nil
.