给出一个数组,在数组中找出两个数,使得他们的和最接近但不超过目标值,返回他们的和。
#参数:array:输入列表
#参数:target:目标值
#返回值是整数
class Solution():
def closeTargetValue(self, target, array):
n = len(array)
if n < 2:
return -1
diff = 0x7fffffff
array.sort()
left = 0
right = n - 1
while left < right:#注意不能写 <= 因为这样就会把一个数取两次
if array[left] + array[right] > target:
right -= 1
else:
diff = min(diff, target - array[left] - array[right])
left += 1
if diff == 0x7fffffff:
return -1
else:
return target - diff
if __name__ == '__main__':
array = [1,3,5,11,7]
target = 0x7fffffff
solution = Solution()
print("输入数组:",array,"目标值",target)
print("最近可以得到的值:",solution.closeTargetValue(target, array))
输入数组: [1, 3, 5, 11, 7] 目标值 2147483647
最近可以得到的值: 18