程序从列表中查找三个唯一元素,其和最接近 k Python

pythonserver side programmingprogramming更新于 2026/2/4 6:04:17

假设我们有一个名为 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

  • 对于 i 在 0 到 nums 大小的范围内,执行

    • j := i + 1

    • k := nums 大小 − 1

    • while j < k,执行

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

      • 如果 s <= target,则

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

        • j := j + 1

      • 否则,

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

        • 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

相关文章


有用资源