给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。
输入:nums = [-1,2,1,-4], target = 1
输出:2
解释:与 target 最接近的和是 2 (-1 + 2 + 1 = 2)
代码:双指针题目,固定第一维度,然后就是典型双指针了。
class Solution:
def threeSumClosest(self, nums: List[int], target: int) -> int:
n = len(nums)
ans = 1e9
nums.sort()
for i in range(n-2):
l, r = i+1, n-1
max_num = nums[i] + nums[-2] + nums[-1]
min_num = nums[i] + nums[i+1] + nums[i+2]
if max_num < target:#当前最大数大于target
if abs(max_num - target) < abs(ans - target):
ans = max_num
continue
if min_num > target:#全局最小数小于target
if abs(min_num - target) < abs(ans - target):
ans = min_num
break
while l < r:#双指针
sums = nums[i] + nums[l] + nums[r]
if abs(sums - target) < abs(ans - target):
ans = sums
#print(ans)
if sums - target == 0:
return sums
elif sums - target < 0:
l += 1
else:r -= 1
return ans
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/3sum-closest
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。