class Solution {
public List<Integer> findClosestElements(int[] arr, int k, int x) {
if (arr == null || arr.length == 0) {
return null;
}
if (k == 0) {
List<Integer> list = new ArrayList<Integer>();
// list.add(0);
return list;
}
int left = largestSmallerEqual(arr, x);
int right = left + 1;
int start = 0;
int end = 0;
List<Integer> result = new ArrayList<>();
for(int i = 0; i < k ; i++) {
if(right >= arr.length || left >= 0 && Math.abs(x - arr[left]) <= Math.abs(arr[right] - x)) {
start = left--;
} else {
end = right++;
}
}
for(int j = start; j <= start + k - 1; j++) {
result.add(arr[j]);
}
return result;
}
private int largestSmallerEqual(int[] arr, int x) {
int left = 0;
int right = arr.length - 1;
while (left < right - 1) {
int mid = left + (right - left) / 2;
if (arr[mid] <= x) {
left = mid;
} else {
right = mid;
}
}
if (arr[right] <= x){
return right;
}
if (arr[left] <= x) {
return left;
}
return 0;
}
}
658. Find K Closest Elements
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
推荐阅读更多精彩内容
- 1 特别要注意:the smaller elements are always preferred. 2 也是bi...
- 找出最接近x的k个数。 Given a sorted array, two integers k and x, f...
- 题目描述 Given a sorted array, two integers k and x, find the...
- Description Given a sorted array, two integers k and x, f...