Smallest Range I
Problem
You are given an integer array nums
and an integer k
.
In one operation, you can choose any index i
where 0 <= i < nums.length
and change nums[i]
to nums[i] + x
where x
is an integer from the range [-k, k]
. You can apply this operation at most once for each index i
.
The score of nums
is the difference between the maximum and minimum elements in nums
.
Return the minimum score of nums
after applying the mentioned operation at most once for each index in it.
Constraints
1 <= nums.length <= 104
0 <= nums[i] <= 104
0 <= k <= 104
Solution
The problem Smallest Range I
can be solved by finding the distance between the maximum and minimum elements in the given array.
Implementation
static const int fast_io = []()
{
std::ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
return 0;
}();
class Solution
{
public:
int smallestRangeI(vector<int> &nums, int k)
{
int diff = *max_element(nums.begin(), nums.end()) - *min_element(nums.begin(), nums.end());
return max(0, diff - 2 * k);
}
};