Swift 3数组平衡点公共方法实现:将嵌套判断改为循环逻辑
重构数组平衡点查找逻辑为通用方法
嘿,我注意到你已经找到了数组平衡点的核心思路,但原来的嵌套if写法只能处理固定长度的数组,复用性很差。咱们把它改成一个通用的公共方法,让它能适配任意长度的整数数组,同时让代码更简洁易维护~
先回顾你的核心逻辑
你的思路是:
- 计算数组总和的一半
divSum - 从左到右累加元素,找到第一个累加和大于等于
divSum的位置,取该位置的元素作为平衡点
重构后的通用方法
下面是优化后的代码,我加入了边界处理(比如空数组),用遍历替代冗余的嵌套if:
import Foundation func findBalancePoint(in array: [Int]) -> Int? { // 先处理空数组的情况,避免后续崩溃 guard !array.isEmpty else { return nil } // 计算数组总和,再取一半 let totalSum = array.reduce(0, +) let divSum = totalSum / 2 var currentAccumulatedSum = 0 // 遍历数组,逐步累加元素 for element in array { currentAccumulatedSum += element // 一旦累加和达到或超过divSum,直接返回当前元素 if currentAccumulatedSum >= divSum { return element } } // 如果遍历完所有元素都没满足(比如数组全是负数的极端情况),返回最后一个元素 return array.last }
测试你的示例数组
用你原来的测试数组验证一下,结果和你原来的代码一致:
let myArray = [1, 2, 5, 8, 4, 4] if let balancePoint = findBalancePoint(in: myArray) { print(balancePoint) // 输出:8 }
为什么这样优化?
- 通用性:不再局限于长度为6的数组,任意长度的整数数组都能处理
- 可读性:去掉了多层嵌套的
if,逻辑清晰直观 - 健壮性:加入了空数组的判断,避免运行时崩溃
- 效率:一旦找到符合条件的元素就立即返回,不需要遍历整个数组
内容的提问来源于stack exchange,提问作者user8276622
相关产品推荐
相关产品推荐

