提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 前言
- 一、题目
- 二、代码
- 总结
前言
一、题目
二、代码
第一轮找数,第二轮扩充
classSolution{publicList<Integer>findClosestElements(int[]arr,intk,intx){intl=0,r=0,i=1;intn=arr.length;List<Integer>a1=newArrayList<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++;}}returna1;}}总结
写的不好,暂时还没发现原因。
这题是定长数组。
现在开始看标答,发现原因。
思路都差不多,1.确定好下标后依次加入2.ArrayList.add(0,arr[i])会移动一次全部元素,也就是头插不好。