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

优化最接近三数之和解决方案以避免超时错误

优化LeetCode三数最接近问题的超时解决方案

你的代码逻辑正确,但还有几个关键优化点可以大幅降低时间复杂度,解决超时问题:

核心优化点

  1. 找到最优解直接终止
    当三数之和等于target时,这就是最接近的结果,无需继续遍历,直接返回target即可。你之前只break了内层while循环,外层for循环还会继续执行,这会浪费大量不必要的计算。

  2. 跳过内层循环的重复元素
    除了跳过i的重复值,内层的l和r遇到重复元素时也可以直接跳过,避免重复计算相同的三数组合。比如当nums[l]和nums[l+1]相等时,l可以直接跳到下一个不同的位置,同理r也是如此。

  3. 初始化值优化
    直接用数组前三个元素的和初始化csum,用这个和与target的差初始化min_diff,省去后续判断csum是否为None的逻辑,同时避免了边界情况的处理开销。

  4. 调整diff更新时机
    现有代码是先移动指针再更新最小差值,调整为先判断当前组合的差值是否更小,再移动指针,确保每个有效组合都被及时比较,逻辑更清晰且减少不必要的判断。

优化后的代码

class Solution:
    def threeSumClosest(self, nums: List[int], target: int) -> int:
        nums.sort()
        n = len(nums)
        # 初始化第一个可能的三数组合
        csum = nums[0] + nums[1] + nums[2]
        min_diff = abs(target - csum)
        
        for i in range(n - 2):
            # 跳过i的重复元素
            if i > 0 and nums[i] == nums[i-1]:
                continue
            l, r = i + 1, n - 1
            
            while l < r:
                current_sum = nums[i] + nums[l] + nums[r]
                current_diff = abs(target - current_sum)
                
                # 更新最小差值和结果
                if current_diff < min_diff:
                    min_diff = current_diff
                    csum = current_sum
                    # 如果差值为0,直接返回,不可能更优
                    if min_diff == 0:
                        return target
                
                # 移动指针并跳过重复元素
                if current_sum > target:
                    while l < r and nums[r] == nums[r-1]:
                        r -= 1
                    r -= 1
                else:
                    while l < r and nums[l] == nums[l+1]:
                        l += 1
                    l += 1
        
        return csum

优化效果说明

  • 提前终止逻辑能在找到完美匹配时立刻结束程序,避免后续所有循环。
  • 内层重复元素跳过能减少大量重复的三数组合计算,尤其是在数组中有大量重复元素时效果显著。
  • 初始化优化简化了代码逻辑,同时避免了边界情况的额外判断开销。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 07:54:22