# 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
```