解题思路:
由于是求最大值与最小值的最小差值,所以要尽量让最大值和最小值接近。
首先需要对数组进行排序,然后对排序后的序列进行计算。
假设序列排序后为:1 2 3 4 5 6 7 8 9 10
如果不能修改值,直接用最大值减去最小值就是结果 10 - 1
如果能修改一个值,就有两种可能:10 - 2(修改N[0]) 9 - 1(修改N[n-1])
如果能修改两个值,就有三种可能:10 - 3(修改N[0]和N[1]) 9 - 2(修改N[0]和N[N-1]) 8 - 1(修改N[n-1]和N[n-2])
如果能修改三个值,就有四种可能:10 - 4(修改N[0]、N[1]、N[2]) 9 - 3(修改N[0]、N[1]、N[n-1]) 8 - 2(修改N[0]、N[n-1]、N[n-2]) 7 - 1(修改N[n-1]、N[n-2]、N[n-3])
根据题目要求,比较四种可能的最小值。
具体代码:
class Solution:
def minDifference(self, nums: List[int]) -> int:
nums.sort()
n=len(nums)
if(len(nums)<=4):
return 0
else:
return min(nums[n-1]-nums[3],nums[n-2]-nums[2],nums[n-3]-nums[1],nums[n-4]-nums[0])