链接:https://leetcode-cn.com/problems/3sum-closest/
给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。
例如,给定数组 nums = [-1,2,1,-4], 和 target = 1.
与 target 最接近的三个数的和为 2. (-1 + 2 + 1 = 2).
思路其实和 LeetCode数组篇:15.三数之和 一样,也是将数组先排序,然后利用双指针的运动过程来记录与 target 绝对值差值最小的三数之和。如果不是特别清楚,可以看看三数之和这篇文章。
思路:
时间复杂度:O(n^2),数组排序为 O(nlogn),循环为 O(n^2),所以最终为 O(n^2)
空间复杂度:O(1)
class Solution:
def threeSumClosest(self, nums: List[int], target: int) -> int:
nums.sort()
n=len(nums)
result=float('inf')
for k in range(n):
if k>0 and nums[k]==nums[k-1]:
continue
i,j=k+1,n-1
while i<j:
sum=nums[k]+nums[i]+nums[j]
if sum==target:
return target
if abs(result-target)>abs(sum-target):
result=sum
if sum<target:
i+=1
else:
j-=1
return result
如果觉得文章不错,希望大家可以关注我噢,点赞、收藏、在看、分享就再好不过了。如果有任何建议和问题,可以在下方给我留言,我会不定期更新更多的文章,祝我们终将自由。