Python程式:刪除K個元素後找到最小振幅


假設我們有一個稱為nums的數字列表,還有一個值k。如果我們從nums中刪除k個元素,則找到(nums的最大值 - nums的最小值)的最小值。

因此,如果輸入類似於nums = [4, 10, 3, 2, 8, 9] k = 3,則輸出將為2,因為如果我們刪除10、8和9,則最大值為4,最小值為2,因此差值為2。

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

  • 對列表nums進行排序

  • p := nums的大小 - k

  • m := (nums的最後一個元素) - nums[0]

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

    • 如果nums[i + p - 1] - nums[i] < m,則

      • m := nums[i + p - 1] - nums[i]

  • 返回m

示例

讓我們看看以下實現,以便更好地理解

def solve(nums, k):
   nums = sorted(nums)
   p = len(nums) - k
   m = nums[-1] - nums[0]
   for i in range(0, len(nums) - p + 1):
      if nums[i + p - 1] - nums[i] < m:
         m = nums[i + p - 1] - nums[i]
   return m

nums = [10, 4, 3, 2, 9, 8]
k = 3
print(solve(nums, k))

輸入

[10, 4, 3, 2, 9, 8], 3

輸出

2

更新於: 2021年10月12日

409 次瀏覽

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告