题目描述
题目分析
原题描述稍微有点绕,用更加通俗易懂的语言描述就是:
给出一个整数
k
,找到一个整数x
且整数x
满足-k <= x <= k
,与A[i]
相加之后得到数组B
。我们得到的就是数组B
中最大值与最小值的最小差值
要得到最大值与最小值的最小差值,那么就应该让最大值尽可能小,最小值尽可能大。
令 a
为最大值,b
为最小值,那么应该满足:
a - k
尽可能小,b + k
尽可能大
所以:最小差值 s = (a - k) - (b + k) = a - b - 2k >= 0
示例代码
/**
* @param {number[]} A
* @param {number} K
* @return {number}
*/
var smallestRangeI = function(A, K) {
const min = Math.min(...A)
const max = Math.max(...A)
return Math.max(0, max - min - 2 * K)
};
- 时间复杂度:
O(n)
- 空间复杂度:
O(1)
写在最后
一直在 LeetCode 上刷题,之前还加入了组织,有兴趣加入一起学习的同学可以在下方留言或者关注我的微信公众号「tony老师的前端补习班」并在后台留言,可以进群跟大佬们一起学习。