给定一个整数sum, 从有N个有序元素的数组中寻找元素a,b,使得a+b的结果最接近sum
2015-04-04 12:58
309 查看
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、c、d,使得 a+b+c+d =sum,最快的平均时间复杂度是____。
- 有一个整数数组,请编写一个函数,找出索引m和n,只要将m和n之间的元素排好序,整个数组就是有序的。注意:n-m应该越小越好,也就是说,找出符合条件的最短序列。 给定一个int数组A和数组的大小n,请
- leetcode:java.T018_4Sum---给定一个整数数组,找出a + b + c + d = target的唯一解,不能有重复元素组
- 【Java】给定一个有序整数数组,元素各不相同且按照升序排列,编写一个算法,创建一个高度最小的二叉查找树
- 对于一个有序数组,我们通常采用二分查找的方式来定位某一元素,请编写二分查找的算法,在数组中查找指定元素。 给定一个整数数组A及它的大小n,同时给定要查找的元素val,请返回它在数组中的位置(从0开始),若不存在该元素,返回-1。若该元素出现多次,请返回第一次出现的位置。
- 程序员面试金典——解题总结: 9.17中等难题 17.6给定一个整数数组,编写一个函数,找出索引m和n,只要将m和n之间的元素排好序,整个数组就是有序的。注意:n - m越小越好,也就是说,找出
- 程序员面试金典: 9.4树与图 4.3给定一个有序整数数组,元素各不相同且按升序排列,创建一颗高度最小的二叉查找树。
- 346/5000 给定一个n个整数的数组S,在S中找到三个整数,使得总和最接近给定数量的目标。 返回三个整数的和。
- 给定一个有序整数数组,元素各不相同且按照升序排列,编写一个算法,创建一个高度最小的二叉查找树
- 程序员面试金典: 9.4树与图 4.3给定一个有序整数数组,元素各不相同且按升序排列,创建一颗高度最小的二叉查找树。 ---快速解法
- 输入一组按降序排列的整数数组,再输入一个整数(sum),返回数组中和为sum的两个元素
- 给定一个整数数组,通过变换使得数组的左边为奇右边为偶数!
- 给定一个存放整数的数组,重新排列数组使得数组左边为奇数,右边为偶数---百度笔试题
- 【二分查找】为非负数组寻找一个上限cap,使得数组的和为给某个给定的数s
- 2014年去哪儿网笔试题--给定一个整型数组,对这个整型数组排序,使得按序拼接数组各元素得到的值最小。
- 给定一个有序的数组,元素各不相同且按升序排列,编写一个算法,创建一棵高度最小的二叉查找树?
- 给定一个存放整数的数组,重新排列数组使得数组左边为奇数,右边为偶数
- 给定一个值S,在有序数组中找出两个元素A和B,使 A+B = S.
- 求一个值是否是一个给定有序数组中两个元素的和
- 给定一个整数数组,其中元素的取值范围为0到10000,求其中出现次数最多的数