在Python中查找两个小于目标值的数字之和
假设我们有一个名为nums的数字列表,还有一个目标值,我们必须找到nums中最大的数字对的总和,其总和最多为(目标值-1)。
因此,如果输入为nums = [8, 3, 4, 9, 2],目标=8,则输出将为7,因为小于8的最大数字对的总和为4 + 3 = 7。
为了解决这个问题,我们将按照以下步骤进行操作−
- 排序列表nums
- p1 := 0
- p2 := nums的大小-1
- m :=-inf
- while p1 < p2,则
- 如果nums[p1] + nums[p2]<target,则
- m :=m和(nums[p1] + nums[p2])的最大值
- p1 := p1 + 1
- 否则,
- p2 :=p2 – 1
- 如果nums[p1] + nums[p2]<target,则
- 返回m
示例
让我们看以下方法以获得更好的理解−
import math
def solve(nums, target):
nums.sort()
p1 = 0
p2 = len(nums) - 1
m = -math.inf
while p1 < p2:
如果nums[p1] + nums[p2] < target:
m = max(m, nums[p1] + nums[p2])
p1 += 1
else:
p2 -= 1
return m
nums = [8, 3, 4, 9, 2]
target = 8
print(solve(nums,target))
输入
[8, 3, 4, 9, 2],8
输出
7