Python程式:查詢列表中三個唯一元素,使其和最接近k


假設我們有一個名為 nums 的數字列表和另一個值 k,我們需要在 nums 中找到三個唯一的條目 (a、b、c),使得 |a + b + c − k| 最小化,並返回絕對差值。

因此,如果輸入類似於 nums = [2, 5, 25, 6] k = 14,則輸出將為 1,因為如果我們取 [2, 5, 6] 將使我們最接近 14,並且絕對差值為 |13 − 14| = 1。

為了解決這個問題,我們將遵循以下步驟 -

  • 對列表 nums 進行排序

  • ans := 1^9

  • 對於範圍從 0 到 nums 大小的 i,執行以下操作

    • j := i + 1

    • k := nums 大小 − 1

    • 當 j < k 時,執行以下操作

      • s := nums[i] + nums[j] + nums[k]

      • 如果 s <= target,則

        • ans := ans 和 target − s 的最小值

        • j := j + 1

      • 否則,

        • ans := ans 和 s − target 的最小值

        • k := k − 1

  • 返回 ans

讓我們看看下面的實現以獲得更好的理解 -

示例

 即時演示

class Solution:
   def solve(self, nums, target):
      nums.sort()
      ans = 1e9
      for i in range(len(nums)):
         j = i + 1
         k = len(nums) − 1
         while j < k:
            s = nums[i] + nums[j] + nums[k]
            if s <= target:
               ans = min(ans, target - s)
               j += 1
            else:
               ans = min(ans, s - target)
               k −= 1
      return ans
ob1 = Solution()
nums = [2, 5, 25, 6]
k = 14
print(ob1.solve(nums, k))

輸入

[2, 5, 25, 6], 14

輸出

1

更新於: 2020年10月21日

191 次檢視

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.