910. 最小差值 II - 力扣(LeetCode) (leetcode-cn.com)
对数组排序,然后分割。
假如数组分割成上面所示的样子,AB段上移,CD段下移,则在i处分割后,数据的最小值只能在A和C处取得,最大值在B和D处取得, 即最小值=min(A[0]+k,A[i]-k),最大值=max(A[i-1]+k,A[length-1]-k)。
class Solution {
public:
int smallestRangeII(vector<int>& nums, int k) {
sort(nums.begin(),nums.end());
int res=nums[nums.size()-1]-nums[0];
for(int i=1;i<nums.size();i++){
int mi=min(nums[0]+k,nums[i]-k);
int ma=max(nums[i-1]+k,nums[nums.size()-1]-k);
res=res>ma-mi?ma-mi:res;
}
return res;
}
};