这道题问的是最大和最小之间的差距,无论改变了第一个还是最后一个,其差距肯定是比原来的小。由于本题改变次数较小,我们可以采取枚举法,假设三次都是取左边的,则最后差距为a[n-1]-a[3]
若两个取左边,一个取右边,则为a[n-2]-a[2]
若1个取左边,2个取右边,则为a[n-3]-a[1]
若3个全取右边,则为a[n-4]-a[0]
这四种可能取最小即可
以此类推此问题可以推广到改变n个值的最小差距。
class Solution {
public:
int minDifference(vector<int>& nums) {
int n = nums.size();
if(n <= 4) return 0;
sort(nums.begin(), nums.end());
return min(min(nums[n-1]-nums[3], nums[n-2]-nums[2]), min(nums[n-3]-nums[1], nums[n-4]-nums[0]));
}
};