Given an array nums
of n integers and an integer target
, find three integers in nums
such that the sum is closest to target
. Return the sum of the three integers. You may assume that each input would have exactly one solution.
Example:
Given array nums = [-1, 2, 1, -4], and target = 1.
The sum that is closest to the target is 2. (-1 + 2 + 1 = 2).
解题思路:与15题l类似,先确定一个数,然后双指针法。当求和结果等于target,可以退出循环
C++
class Solution {
public:
int threeSumClosest(vector<int>& nums, int target) {
if(nums.size() < 3)
return 0;
sort(nums.begin(), nums.end());
int tempsum = nums[0] + nums[1] + nums[2], tempmin = abs(target - tempsum), ans = tempsum;
for(int i = 0; i < nums.size()-2; ++ i){
int low = i + 1, high = nums.size() - 1;
while(low < high){
tempsum = nums[i] + nums[low] + nums[high];
if(abs(tempsum - target) < tempmin){
tempmin = abs(tempsum - target);
ans = tempsum;
}
if(tempmin == 0)
break;
else if(tempsum > target)
-- high;
else
++ low;
}
}
return ans;
}
};
Python
class Solution(object):
def threeSumClosest(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: int
"""
if len(nums) < 3:
return 0
nums = sorted(nums)
tempmin, ans = sys.maxint, 0
for i in range(len(nums)):
low, high = i+1, len(nums)-1
while low < high:
tempsum = nums[i] + nums[low] + nums[high]
if abs(tempsum - target) < tempmin:
tempmin = abs(tempsum - target)
ans = tempsum
if tempmin == 0:
return ans
if tempsum > target:
high -= 1
else:
low += 1
return ans