一、每日一题
908. 最小差值 I
给你一个整数数组 nums,和一个整数 k 。
在一个操作中,您可以选择 0 <= i < nums.length 的任何索引 i 。将 nums[i] 改为 nums[i] + x ,其中 x 是一个范围为 [-k, k] 的整数。对于每个索引 i ,最多 只能 应用 一次 此操作。
nums 的 分数 是 nums 中最大和最小元素的差值。
在对 nums 中的每个索引最多应用一次上述操作后,返回 nums 的最低 分数 。
二、解题思路
首先根据题目要求得知要求最大最小值的差值,所以直接先遍历找最大最小值(或者排序直接用头尾),然后判断max-min与2k的关系如果小于等于2k,即通过修改后最小差值为0,否则就返回max-min-2*k。
三、源代码
class Solution {
public:
int smallestRangeI(vector<int>& nums, int k) {
int a=nums[0],b=nums[0];
for(int i=0;i<nums.size();i++)
{
a=max(a,nums[i]);
b=min(b,nums[i]);
}
return a-b<=2*k? 0 :a-b-2*k;
}
};
好像用sort会溢出,目前学的还不够,也不知道啥原因