提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
前言
一、题目


二、代码
第一轮找数,第二轮扩充
java
class Solution {
public List<Integer> findClosestElements(int[] arr, int k, int x) {
int l=0,r=0,i=1;
int n=arr.length;
List<Integer> a1=new ArrayList<Integer>();
while(n>1 && r-l+1<=k && i<n){
if(arr[i-1]==arr[i]){
i++;
continue;
}
if(Math.abs(arr[i-1]-x)<=Math.abs(arr[i]-x)){
r=i-1;
l=r;//偏左
break;
}else{
i++;
}
}
if(i!=n) {
a1.add(arr[r]);
}else {
r=i-1;
l=r;
a1.add(arr[n-1]);
}
while(a1.size()<k){
if(l-1<0){
a1.add(arr[r+1]);
r++;
continue;
}
if(r+1==n){
a1.add(0,arr[l-1]);
l--;
continue;
}
if(Math.abs(arr[l-1]-x)<=Math.abs(arr[r+1]-x)){
a1.add(0,arr[l-1]);
l--;
}else{
a1.add(arr[r+1]);
r++;
}
}
return a1;
}
}
总结
写的不好,暂时还没发现原因。
这题是定长数组。
现在开始看标答,发现原因。
思路都差不多,1.确定好下标后依次加入2.ArrayList.add(0,arr[i])会移动一次全部元素,也就是头插不好。