题目描述
输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
输出描述:
对应每个测试案例,输出两个数,小的先输出。
解答:两侧夹逼的方法
public class Q_42 {
public ArrayList<Integer> FindNumbersWithSum(int[] array, int sum) { if(array.length<2) return new ArrayList<Integer>(); int first = 0, second = 0; boolean getfirst = false; int low = 0; int high = array.length - 1; while (low < high) { if (array[low] + array[high] < sum) { low++; } else if (array[low] + array[high] > sum) { high--; } else { if (!getfirst) { getfirst = true; first = array[low]; second = array[high]; } if (array[low] * array[high] < first * second) { first = array[low]; second = array[high]; } low++; high--; } } ArrayList<Integer> result = new ArrayList<>(); if(getfirst){ result.add(first); result.add(second); } return result; } public static void main(String[] args) { int[] arr={1,2,3,4,5}; System.out.println(new Q_42().FindNumbersWithSum(arr, 6)); }
}