classSolution { public: vector<int> findClosestElements(vector<int>& arr, int k, int x){ int n = arr.size(); int l = 0, r = n-1; while (r-l >= k) { if (x-arr[l] <= arr[r]-x) r--; else l++; } vector<int> res(k); copy(arr.begin()+l, arr.begin()+l+k, res.begin()); return res; } };
二分+滑动窗口(c++)
classSolution { public: vector<int> findClosestElements(vector<int>& arr, int k, int x){ int n = arr.size(); int l = 0, r = n-1; while (l < r) { int m = (l + r) / 2; if (arr[m] < x) l = m + 1; else r = m; } r = min(n-1, l+k-1); l = max(0, l-k); while (r-l >= k) { if (x-arr[l] <= arr[r]-x) r--; else l++; } vector<int> res(k); copy(arr.begin()+l, arr.begin()+l+k, res.begin()); return res; } };
二分(c++)
classSolution { public: vector<int> findClosestElements(vector<int>& arr, int k, int x){ int n = arr.size(); int l = 0, r = n-k; while (l < r) { int m = (l + r) / 2; if (x-arr[m] > arr[m+k]-x) l = m + 1; else r = m; } vector<int> res(k); copy(arr.begin()+l, arr.begin()+l+k, res.begin()); return res; } };
滑动窗口(python)
classSolution: deffindClosestElements(self, arr: List[int], k: int, x: int) -> List[int]: n = len(arr) l, r = 0, n-1 while r-l >= k: if x-arr[l] <= arr[r]-x: r -= 1 else: l += 1 return arr[l:l+k]
二分+滑动窗口(python)
classSolution: deffindClosestElements(self, arr: List[int], k: int, x: int) -> List[int]: n = len(arr) l, r = 0, n-1 while l < r: m = (l + r) // 2 if arr[m] < x: l = m + 1 else: r = m r = min(n-1, l+k-1) l = max(0, l-k) while r-l >= k: if x-arr[l] <= arr[r]-x: r -= 1 else: l += 1 return arr[l:l+k]
二分(python)
classSolution: deffindClosestElements(self, arr: List[int], k: int, x: int) -> List[int]: n = len(arr) l, r = 0, n-k while l < r: m = (l + r) // 2 if x-arr[m] > arr[m+k]-x: l = m + 1 else: r = m return arr[l:l+k]