# Leetcode 1509. Minimum Difference Between Largest and Smallest Value in Three Moves 給定一個array名叫nums,可以選擇其中一個值對於其他索引的值進行改變,最多可以做3次,之後回傳改變後的陣列最小的最大值-最小值的數值。 ## 想法 因為是要找最大值-最小值,所以一定是對於array的最大跟最小的地方進行操作。 所以經過思考,我們可以得到以下結論: 如果排序後的陣列為: [a1,a2,a3,a4,a5,a6,a7,a8,a9,a10] 我們可以拿改變3次,所以會有以下組合。 改變 a1,a2,a3 =>答案為 a10 - a4 改變 a1,a2,a10 =>答案為 a9 - a3 改變 a1,a9,a10 =>答案為 a8 - a2 改變 a8,a9,a10 =>答案為 a7 - a1 所以我們只需要計算以上四種組合,然後在這四種組合中最小的即為答案。 程式碼: ``` def minDifference(self, nums: List[int]) -> int: if(len(nums)<4): return 0 nums.sort() for i in range(4): if(i==0): ans = nums[len(nums)-1-i]-nums[-i+3] else: ans= min(ans,nums[len(nums)-1-i]-nums[-i+3]) return ans ```