LeetCode三数之和最接近问题:本地运行正常但平台报类型错误
问题分析与解决方法
1. 触发TypeError的直接原因
你的代码没有用return返回结果,而是用print(sum1)输出。LeetCode判题系统要求函数返回符合要求的整数,但你的函数默认返回None(Python无return语句的函数会返回None),这就导致了“返回值不符合预期整数类型”的报错。
2. 代码逻辑完全不符合题目要求
题目是要找三个整数的和最接近target,而你的代码是把数组中等于target、target+1、target-1的元素全部累加,完全偏离了需求。拿示例输入来说:nums = [-1,2,1,-4], target = 1,你的代码会累加2(等于target+1)和1(等于target),得到sum1=3,和正确输出2完全不符。
正确实现方案
用排序+双指针法可以高效解决这个问题,代码如下:
class Solution(object): def threeSumClosest(self, nums, target): nums.sort() n = len(nums) closest_sum = nums[0] + nums[1] + nums[2] for i in range(n - 2): left = i + 1 right = n - 1 while left < right: current_sum = nums[i] + nums[left] + nums[right] # 更新最接近的和 if abs(current_sum - target) < abs(closest_sum - target): closest_sum = current_sum # 移动指针缩小范围 if current_sum < target: left += 1 elif current_sum > target: right -= 1 else: # 找到完全匹配的和,直接返回 return current_sum return closest_sum
思路说明
- 先对数组排序,方便双指针的移动和比较
- 初始化最接近的和为数组前三个元素的和
- 遍历每个元素作为三元组的第一个数,用左右指针指向剩余元素的两端
- 计算当前三元组的和,和目标值比较,更新最接近的和
- 根据当前和与目标值的大小关系,移动左/右指针,逐步缩小查找范围
内容的提问来源于stack exchange,提问作者varun kumar
相关产品推荐
相关产品推荐

