与“寻找数组中满足和为定值的两个数”问题的思路一样:
首先先排序;
然后定义两个首尾指针left、right,逐次判断a[i]+a[j]?=0:
①如果某一刻a[left]+a[right]>0, 和应该要变小,则left不动,right--,
②如果某一刻a[left]+a[right]<0, 和应该要变大,则left++,right不动。
③如果某一时刻a[left]+a[right]=0,则直接退出循环。
同时还要注意,题目还要求最接近0的两个数?
所以定义Diff变量保存两数和与0最小的距离,first和second变量保存与0有最小距离的两个数的数组下标。
当a[right]+a[left]>0或者a[right]+a[left]<0时,要判断当前这两个数和与0的距离是否还要小于Diff,如果是则要更新Diff、first、second三个变量。
public static void zero(int[] a){
Arrays.sort(a);
int left = 0, right = a.length-1;
int Diff = a[right]+a[left];
int first=-1,second=-1;
while(left<right){
if(a[right]+a[left]>0){
if(Math.abs(a[right]+a[left])<=Math.abs(Diff)){
Diff &#