# 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>
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up