每天一道leetecode:16、最接近的三数之和(medium)

mac2025-03-28  19

emmmmmmmmmmmm,这道题其实和15题没啥区别,15题就是加和等于0就ok,这道题反而更简单,返回加和最近的。

当然,如果加和和target相同,直接返回0就ok了。

仍然采用:

1、先排序。

2、三个指针,一个从头部向尾部走,剩下两个在前面指针的后面前后移动。

这样最后的时间复杂度就是O(n^2)

如果理解了15题,解答这道题还是很简单的,如果没有理解15题的,请看我上一个博文。

啦啦啦

def threeSumClosest(nums, target): # 先对nums排序 for i in range(len(nums)): for j in range(i+1,len(nums)): if nums[i] > nums[j]: res = nums[i] nums[i] = nums[j] nums[j] = res y = 0 # 距离初始化为一个很大的值 dis = 100000 # 同三数之和==0,仍然设置三个指针进行遍历 k = 0 for k in range(len(nums)): i = k + 1 j = len(nums) - 1 while i < j: # 如果三数加和 - target 比原来的距离小,重新赋值 if abs(nums[k] + nums[i] + nums[j] - target) < dis: print(nums[k],nums[i],nums[j]) dis = abs(nums[k] + nums[i] + nums[j] - target) y = nums[k] + nums[i] + nums[j] if nums[k] + nums[i] + nums[j] > target: j -= 1 elif nums[k] + nums[i] + nums[j] < target: i += 1 elif nums[k] + nums[i] + nums[j] == target: return nums[k] + nums[i] + nums[j] elif abs(nums[k] + nums[i] + nums[j] - target) > dis: if nums[k] + nums[i] + nums[j] > target: j -= 1 elif nums[k] + nums[i] + nums[j] < target: i += 1 elif nums[k] + nums[i] + nums[j] == target: return nums[k] + nums[i] + nums[j] else: if nums[k] + nums[i] + nums[j] > target: j -= 1 elif nums[k] + nums[i] + nums[j] < target: i += 1 elif nums[k] + nums[i] + nums[j] == target: return nums[k] + nums[i] + nums[j] return y nums = list() nums.append(0) nums.append(1) nums.append(2) print(threeSumClosest(nums,3))

结果:

最新回复(0)