leetcode 908. 最小差值 I(簡單題)
阿新 • • 發佈:2018-11-21
題目:
給定一個整數陣列 A
,對於每個整數 A[i]
,我們可以選擇任意 x
滿足 -K <= x <= K
,並將 x
加到 A[i]
中。
在此過程之後,我們得到一些陣列 B
。
返回 B
的最大值和 B
的最小值之間可能存在的最小差值。
思路:
簡單題,最主要的是看陣列最大元素和最小元素之差是不是小於2*K。如果小於,那麼這些數字肯定可以變成相同的。不同那麼最大差值就是max-min-2*K.
程式碼:
class Solution { public: int smallestRangeI(vector<int>& A, int K) { int sz = A.size(); if(sz==1||sz==0)return 0; int mi = 1e9,ma = -1; for(int i=0;i<sz;i++){ if(A[i]>ma)ma = A[i]; if(A[i]<mi)mi = A[i]; } if(ma-mi<=2*K)return 0; else return ma-mi-2*K; } };
精簡程式碼:
參考自一位大佬,先排序,利用vector的front和back屬性獲取最開始和最末尾元素。
class Solution {
public:
int smallestRangeI(vector<int>& A, int K) {
sort(A.begin(),A.end());
if(A.back()-A.front()<=2*K)return 0;
return A.back()-A.front()-2*K;
}
};