给一个包含 n 个整数的数组 S, 找到和与给定整数 target 最接近的三元组,返回这三个数的和。
样例
例1:
输入:[2,7,11,15],3
输出:20
解释:
2+7+11=20
例2:
输入:[-1,2,1,-4],1
输出:2
解释:
-1+2+1=2
挑战
O(n^2) 时间, O(1) 额外空间。
注意事项
只需要返回三元组之和,无需返回三元组本身
输入测试数据 (每行一个参数)如何理解测试数据?
背向型双指针:
##三数之和
class Solution:
"""
@param numbers: Give an array numbers of n integer
@param target: An integer
@return: return the sum of the three integers, the sum closest target.
"""
def threeSumClosest(self, numbers, target):
# write your code here
#双指针,先固定一个值,然后循环判断另外两个值,三数之和和target进行比较,如果小于则更新,否则,不更新
length = len(numbers)
min_num,res = sys.maxsize, 0
numbers = sorted(numbers)
#先固定一个值
for i in range(length):
value = numbers[i]
#left,right表示另外两个
left, right = 0, i - 1while left < right:
sum = numbers[left] + numbers[right] + value
#在这里进行取差值最小的
if (abs(sum - target) < min_num):
res = sum
min_num = abs(sum - target)
#移动指针,控制sum的大小,保持sum - target之间的差值最小
if sum > target:
right -= 1else:
left += 1return res