标签:有序数组 最接近结果
class FindClosestPairExample { public static void findAndPrintClosest(int[] arrayOne, int expectedSum) { int lenOne = arrayOne.length; //数组长度,默认全部填满。 int diff = Integer.MAX_VALUE; //定义两数与期望值的差值;默认取最大整数 int resultOne = 0; //第一个元素 int resultTwo = 0; //另一个元素 int leftIndex = 0; //左边开始的数组下标 int rightIndex = lenOne - 1; //右边开始的数组下标 while (leftIndex < lenOne && rightIndex >= 0 && leftIndex != rightIndex) {//若左下标不超过数组长度,右下标不小于0,并且左右元素不相等 if (Math.abs(arrayOne[leftIndex] + arrayOne[rightIndex] //若两个数的和减去期望值 所得的差值,比当前的差值小,说明找到了更合适的元素组合 - expectedSum) < diff) { resultOne = arrayOne[leftIndex];//更新结果值 resultTwo = arrayOne[rightIndex]; diff = Math.abs(resultOne + resultTwo - expectedSum);//更新差值 } else if (arrayOne[leftIndex] + arrayOne[rightIndex] < expectedSum) {//若当前差值依然是最小的,并且两数之和比期望值小,说明应该增大左边的值 leftIndex++; } else { //若当前差值依然是最小的,并且两数之和比期望值大,说明应该减小右边的值 rightIndex--; }//if }//end of while System.out.printf("[%d , %d] \n", resultOne, resultTwo); } public static void main(String[] args) { int[] arrayOne = { -5, -1, 0, 1, 4, 5, 7, 9 };//有序数组 System.out.println("与期望值20相差最小的两个数为:"); findAndPrintClosest(arrayOne, 20); } }
程序运行结果:
与期望值20相差最小的两个数为: [7 , 9]
给定一个整数sum, 从有N个有序元素的数组中寻找元素a,b,使得a+b的结果最接近sum
标签:有序数组 最接近结果
原文地址:http://blog.csdn.net/lingzhm/article/details/44872481