1.有序数组int[] i1 = {1, 3, 5,6}; int[] i2 = {2, 4, 6};
2.将其中一个有序数组倒序取负值。{-6,-5, -3, -1}
3.将数组拼接Integer[] i3 = {-6,-5, -3, -1, 2, 4, 6};
4.然后先正向循环i1,依次取出i2中元素,求和,若和大于等于0,正向循环结束,start=i,否则start=i1.length-1;
5.然后先反向循环i2,依次取出i1中元素,求和,若和小于等于0,反向循环结束,end=i,否则end=i1.length;
6.start和end即为差值最小元素下标,从i3中直接获取即可。
public static void main(String[] args) { int[] i1 = {1, 3, 5,6}; int[] i2 = {2, 4, 6}; Integer[] i3 = {-6,-5, -3, -1, 2, 4, 6}; int start = -1; int end = -1; int max = i3.length - 1; outer1: for (int i = 0; i < i1.length; i++) { for (int j = 0; j < i2.length; j++) { if ((i3[i] + i3[j + i1.length]) >= 0) { start = i; break outer1; } } } if(start == -1){ start=i1.length-1; } outer2: for (int i = max; i >= i2.length; i--) { for (int j = i1.length-1; j >= 0; j--) { if ((i3[i] + i3[j]) <= 0) { end = i; break outer2; } } } if(end == -1){ end=i1.length; } System.out.println("差值最小的两个元素为:"+i3[start]+"-----"+i3[end]); }