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 次瀏覽

開啟您的職業生涯

完成課程後獲得認證

開始學習
廣告
© . All rights reserved.