解題思路:
一道使用經典二分做的題目,但是思路需要經過一定的推導,即臨界點怎么找,怎么說明該點是差值和最小的位置?觀察發現,臨界點位于左邊差比右邊差相等或者略小的臨界位置,這時候從最左邊連續的k個數與x的差最小,代碼如下:
class Solution {
public:
vector<int> findClosestElements(vector<int>& arr, int k, int x) {
int low = 0, high = arr.size() - k;
while(low < high) {
int mid = (high + low) / 2;
// 找左邊差比右邊差相等或者略小的臨界位置
if(x - arr[mid] > arr[mid + k] - x) {
low = mid + 1;
} else {
high = mid;
}
}
// 回傳從low開始的k長度的陣列
return vector<int>(arr.begin() + low, arr.begin() + k + low);
}
};
/*作者:heroding
鏈接:https://leetcode-cn.com/problems/find-k-closest-elements/solution/cer-fen-fa-by-heroding-a89x/
來源:力扣(LeetCode)
著作權歸作者所有,商業轉載請聯系作者獲得授權,非商業轉載請注明出處,*/
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/287705.html
標籤:其他
上一篇:影像處理YUV的詳解
