题目描述 输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
import java.util.ArrayList; public class FindNumbersWithSum { public static void main(String[] args) { int [] arr = {1,2,4,7,11,16}; ArrayList<Integer> list = FindNumbersWithSum(arr,17); for (int i = 0; i < list.size(); i++) { System.out.println(list.get(i)); } } public static ArrayList<Integer> FindNumbersWithSum(int [] array, int sum) { int i = 0; int j = array.length; int max = 32767; ArrayList<Integer> list = new ArrayList<>(); while(i < j){ if(array[i] + array[j - 1] == sum){ if(array[i] * array[j - 1] < max){ max = array[i] * array[j - 1]; list.add(array[i]); list.add(array[j-1]); } i++; j--; }else if(array[i] + array[j - 1] > sum){ j--; }else{ i++; } } return list; } } import java.util.ArrayList; /* 输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S, 如果有多对数字的和等于S,输出两个数的乘积最小的。 */ public class FindNumbersWithSum02 { public static void main(String[] args) { int [] arr = {1,2,4,7,11,16}; ArrayList<Integer> list = FindNumbersWithSum(arr,17); for (int i = 0; i < list.size(); i++) { System.out.println(list.get(i)); } } public static ArrayList<Integer> FindNumbersWithSum(int [] array, int sum) { ArrayList<Integer> list1 = new ArrayList<>(); for (int i = 0; i < array.length; i++) { list1.add(array[i] ); } ArrayList<Integer> list2 = new ArrayList<>(); int max = 32767; for (int i = 0; i < array.length; i++) { if(list1.contains((sum - array[i]))){ if(array[i] * ( sum - array[i]) < max){ max = array[i] * ( sum - array[i]); if(array[i] < ( sum - array[i]) ){ list2.add(array[i]); list2.add(sum - array[i]); }else { list2.add(sum - array[i]); list2.add(array[i]); } } } } return list2; } }