题目描述
输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
输出描述:
对应每个测试案例,输出两个数,小的先输出。
1 import java.util.ArrayList; 2 3 /** 4 * 5 * @author gentleKay 6 * 题目描述 7 * 输入一个递增排序的数组和一个数字S,在数组中查找两个数, 8 * 使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。 9 * 输出描述: 10 * 对应每个测试案例,输出两个数,小的先输出。 11 */ 12 13 public class Main41 { 14 15 public static void main(String[] args) { 16 // TODO Auto-generated method stub 17 int[] array = {1,2,4,7,11,16}; 18 System.out.println(Main41.FindNumbersWithSum(array, 10)); 19 } 20 21 public static ArrayList<Integer> FindNumbersWithSum(int [] array,int sum) { 22 ArrayList<ArrayList<Integer>> list = new ArrayList<>(); 23 for (int i=0;i<array.length;i++) { 24 for (int j=i+1;j<array.length;j++) { 25 int num = 0; 26 ArrayList<Integer> arr = new ArrayList<>(); 27 arr.add(array[i]); 28 arr.add(array[j]); 29 num = array[i] + array[j]; 30 if (num == sum) { 31 list.add(arr); 32 break; 33 } 34 } 35 } 36 37 ArrayList<Integer> arraylist = new ArrayList<>(); 38 if (list.size() == 0) { 39 return arraylist; 40 } 41 for (int i=0;i<list.size();i++) { 42 int mult = 1; 43 mult = list.get(i).get(0) * list.get(i).get(1); 44 arraylist.add(mult); 45 } 46 47 int index = 0; // 用于标记 最小值的位置 48 int temp = arraylist.get(0); 49 for (int i=1;i<arraylist.size();i++) { 50 if (temp > arraylist.get(i)) { 51 temp = arraylist.get(i); 52 index = i; 53 } 54 } 55 return list.get(index); 56 } 57 }