You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift 3数组平衡点公共方法实现:将嵌套判断改为循环逻辑

重构数组平衡点查找逻辑为通用方法

嘿,我注意到你已经找到了数组平衡点的核心思路,但原来的嵌套if写法只能处理固定长度的数组,复用性很差。咱们把它改成一个通用的公共方法,让它能适配任意长度的整数数组,同时让代码更简洁易维护~

先回顾你的核心逻辑

你的思路是:

  1. 计算数组总和的一半divSum
  2. 从左到右累加元素,找到第一个累加和大于等于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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:38:02