NO.16最近的三数之和
#暴力解法,直接三重循环 def threeSumClosest(self, nums: List[int], target: int) -> int: sub = 999999999999 sum = 0 for i in range(len(nums)): for j in range(i+1,len(nums)): for k in range(j+1,len(nums)): if (abs(nums[i]+nums[j]+nums[k]-target))<sub: sum = nums[i]+nums[j]+nums[k] sub = abs(sum-target) return sum #leetcode显示有用例子过不了但思路应该是没问题的,后面运行多次又显示超时 #时间复杂度:O(n³),三层循环。 #空间复杂度:O(1),常数个。
#本题采用排序+双指针的思路 #先进行特例处理 #排序从小到大 #在分别设置左右指针,与上题不同差距最小得用abs做判断 #其余思路与上一题一致 def threeSumClosest(self, nums: List[int], target: int) -> int: n=len(nums) if(not nums or n<3): return None nums.sort() res=float("inf") for i in range(n): if(i>0 and nums[i]==nums[i-1]): continue L=i+1 R=n-1 while(L<R): cur_sum=nums[i]+nums[L]+nums[R] if(cur_sum==target): return target if(abs(cur_sum-target)<abs(res-target)): res=cur_sum if(cur_sum-target<0): L+=1 else: R-=1 return res