1
.问题描述
给出一个数组,在数组中找到
2
个数,使得它们的和最接近但不超
过目标值,返回它们的和。
2
.问题示例
输入
target=15
,
array=[1
,
3
,
5
,
11
,
7]
,输出
14
,
11+3=14
。输入
target=16
和
array=[1
,
3
,
5
,
11
,
7]
,输出
16
,
11+5=16
。
3
.代码实现
class Solution:
def chooseTarget(self,target,array):
n = len(array)
if n < 2:
return -1
array.sort()
max_s = 0x7fffffff ##表示32位二进制数的最大值
left = 0
right = n - 1
while left < right:
if array[left] + array[right] > target:
right -= 1
else:
max_s = min(max_s,target - array[left] - array[right])
left += 1
if max_s == 0x7fffffff:
return -1
else:
return target - max_s
if __name__ == "__main__":
array = [1,3,5,11,7]
target = 15
s = Solution()
print(s.chooseTarget(target,array))
4
.运行结果
输入:
[1,3,5,11,7]
15
输出:
14