数组-(sum close)找到数组中和与k最接近的3个数字
class Solution:
'''
找到数组中结果与k接近的3个元素
'''
def threeSumClosest(self, numbers, target):
# 排序
numbers.sort()
# 最接近的和
ans = None
# 结果列表
res = []
for i in range(len(numbers)):
left, right = i + 1, len(numbers) - 1
# 从i号位置开始搜索,i=0时搜索右边所有的,i=3时,不搜索0,1,2,因为0-3,1-3,2-3的组合前面已经搜索过了
while left < right:
sum = numbers[left] + numbers[i] + numbers[right]
# 比较最近和
if ans is None or abs(sum - target) < abs(ans - target):
ans = sum
res = [numbers[i], numbers[left], numbers[right]]
# 因为已经从小到大排序
if sum <= target: # 小于target时尝试左边变得更大
left += 1
else: # 大于target时尝试右边变得更小
right -= 1
return ans, res
s = Solution()
#和最接近1的
print(s.threeSumClosest([-1, 1, 2, -4, -1], 1))
#得出和为0的最接近
#(0, [-1, -1, 2])