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
廣告