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

如何减少循环嵌套?三数之和Swift代码优化与高效编程思维

优化三数之和判断的Swift实现与高效代码思维培养

一、减少循环嵌套的具体方案:双指针法

原来的三重循环时间复杂度是O(n³),数据量一大就会很慢。我们可以用双指针法把复杂度降到O(n²),核心思路是借助有序数组的特性,用两个指针的移动替代内层两层循环:

  1. 先给数组排序,排序的时间是O(n log n),这步是后续优化的基础
  2. 遍历数组中的每个元素作为第一个数,然后用左指针指向它的下一个位置,右指针指向数组末尾
  3. 根据三个数的和与目标值的对比,移动指针:
    • 和小于目标值:左指针右移,让总和变大
    • 和大于目标值:右指针左移,让总和变小
    • 和等于目标值:直接返回true,说明找到符合条件的三个数

Swift代码示例

func hasThreeSum(_ nums: [Int], target: Int) -> Bool {
    let sortedNums = nums.sorted()
    let count = sortedNums.count
    
    for i in 0..<count - 2 {
        // 跳过重复元素,避免重复计算(可选但实用的优化)
        if i > 0 && sortedNums[i] == sortedNums[i-1] {
            continue
        }
        
        var left = i + 1
        var right = count - 1
        
        while left < right {
            let currentSum = sortedNums[i] + sortedNums[left] + sortedNums[right]
            if currentSum == target {
                return true
            } else if currentSum < target {
                left += 1
                // 跳过重复的左指针元素,减少无效遍历
                while left < right && sortedNums[left] == sortedNums[left-1] {
                    left += 1
                }
            } else {
                right -= 1
                // 跳过重复的右指针元素
                while left < right && sortedNums[right] == sortedNums[right+1] {
                    right -= 1
                }
            }
        }
    }
    return false
}

二、培养高效代码思维的几个实用方法

1. 先算复杂度,再想优化方向

写代码前先估算暴力解法的复杂度,比如三重循环O(n³),明显可以优化。然后思考有没有更低复杂度的思路——比如用空间换时间(比如哈希表存已遍历元素),或者利用排序+双指针这类算法技巧。

2. 吃透经典问题的解法

像两数之和、三数之和、滑动窗口这类经典问题,它们的解法是很多复杂问题的基础。比如三数之和本质就是“固定一个数,找两数之和等于目标差值”,把复杂问题拆解成熟悉的小问题,就能快速找到优化方向。

3. 别忽略边界和重复场景

数组里的重复元素、空数组、目标值超出数组元素范围这些场景,不仅要处理,还能用来优化——比如上面代码里跳过重复元素,能减少很多不必要的循环,提升实际运行效率。

4. 多对比不同解法,复盘总结

写完代码后,看看有没有其他实现方式,比如用哈希表实现三数之和的另一种思路,对比双指针和哈希表的时间、空间差异,总结哪种场景下用哪种方法更合适。

5. 选对数据结构

合适的数据结构能直接降低复杂度:比如哈希表可以把查找从O(n)降到O(1),有序数组能让双指针操作成为可能。写代码前先想清楚,当前问题需要快速查找?还是需要有序遍历?再选对应的结构。

内容的提问来源于stack exchange,提问作者nitpaxy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 21:25:21