Python程序:查找小于目标值的两个数字之和


假设我们有一个名为nums的数字列表和一个目标值,我们需要找到nums中最大的一对数字的和,其和最多为(目标值-1)。

例如,如果输入为nums = [8, 3, 4, 9, 2],目标值= 8,则输出为7,因为小于8的最大数字对的和是4 + 3 = 7。

为了解决这个问题,我们将遵循以下步骤:

  • 对列表nums进行排序
  • p1 := 0
  • p2 := nums的大小 - 1
  • m := -∞
  • 当p1 < p2时,执行以下操作:
    • 如果nums[p1] + nums[p2] < 目标值,则
      • m := m和(nums[p1] + nums[p2])中的最大值
      • p1 := p1 + 1
    • 否则:
      • p2 := p2 - 1
  • 返回m

示例

让我们来看下面的实现,以便更好地理解:

import math
def solve(nums, target):
   nums.sort()
   p1 = 0
   p2 = len(nums) - 1
   m = -math.inf
   while p1 < p2:
      if 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

更新于:2021年10月14日

619 次浏览

开启您的职业生涯

完成课程后获得认证

开始学习
广告