---
# System prepended metadata

title: 908. Smallest Range I

---


# 908. Smallest Range I
[908. Smallest Range I](https://leetcode.com/problems/smallest-range-i/) (<font color="#00AF9B"> Easy</font> 通過率:  71.0%)



## 限制條件
<ul>
<li>1 <= nums.length <= 10^4</li>
<li>0 <= nums[i] <= 10^4</li>
<li>0 <= k <= 10^4</li>
</ul>




### 解法 1
這題其實沒有很複雜，就是去找最大值跟最小值就好，其他不用管，可以看 [1,3,6] 這組例子，就算我們在不知道所有的值變成 4 也還是可以知道 max(nums) - min(nums) = 0 ，原因在於 3 比 1 和 6 更接近 (1 + 3 + 6) / nums.size() = 3.33 ，代表我利用 k 之後會比另外兩數字更接近，也就是說，在加上 k 的運算之後，這些原本的最大最小值，還是最大最小值，因此我可以簡化成直接找最大最小值就好。

接著，前面只是我簡化了運算流程，也就是我沒有做 k 的運算還是找到了經過 k 運算之後的最大最小值，所以我要補做，因此在程式碼當中的最後一行就是做這個效果，我將最大最小值相減，在補上 k 的運算，而一加一減的結果就是差值會更小，最小為 0 ，所以直接變成一行求解。

- 時間複雜度: O(n)
- 空間複雜度: O(1)

```cpp!=
class Solution {
public:
    int smallestRangeI(vector<int>& nums, int k) {
        int maxNum = INT_MIN, minNum = INT_MAX;
        for (auto& num : nums) {
            maxNum = max(maxNum, num);
            minNum = min(minNum, num);
        }
        return max(0, maxNum - minNum - k * 2);
    }
};
```
</int>