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...