和为S的两个数字

题目描述

输入一个递增排序的数组和一个数字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 }
原文地址:https://www.cnblogs.com/strive-19970713/p/11177352.html