给你一个长度为 n 的整数数组 nums 和 一个目标值 target。请你从 nums 中选出三个整数,使它们的和与 target 最接近。
返回这三个数的和。假定每组输入只存在恰好一个解。
示例
输入:nums = [-1,2,1,-4], target = 1
输出:2
解释:与 target 最接近的和是 2 (-1 + 2 + 1 = 2) 。
解析
1)显然,这道题和三数之和思路一样,也是排序加双指针的思路;
2)本题不需要考虑排重的问题,简单了;
3)三数之和跟目标值比较大小,小了就左指针右移,大了就右指针左移。
代码示例
class Solution: def threeSumClosest(self, nums: List[int], target: int) -> int: nums.sort() n = len(nums) ans = nums[0] + nums[1] + nums[2] for i in range(n): l = i+1 r = n-1 while l < r: s = nums[i] + nums[l] + nums[r] if abs(target-s) < abs(target-ans): ans = s if target > s: l += 1 elif target < s: r -= 1 else: return s return ans
执行用时:7404 ms, 在所有 Python3 提交中击败了 5.01% 的用户.
本文为 陈华 原创,欢迎转载,但请注明出处:http://ichenhua.cn/read/419