我来一个java的题解
输出描述限制了: 如果结果有多个 则输出乘积小的
- 我觉得这是间接提醒: 逆着遍历数组来求解
- 因为我们知道(别问我怎么知道)如果2个数和相等 大数约大 小数约小 乘积越小 (123 456 -> 1 x 6 2 x 5 3 x 4)
public ArrayList<Integer> FindNumbersWithSum(int[] array, int sum) { ArrayList<Integer> list = new ArrayList(); int length = array.length; if (length == 0) { return list; } for (int i = length - 1; i > 0; i--) { //一层循环从最后一个数开始 1*n遍历 for (int j = i; j > 0; j--) { if (array[length - j - 1] + array[i] == sum) { //二层循环 i+小于i的每一个数 第一个匹配的就是答案 list.add(array[length - j - 1]); list.add(array[i]); return list; // 返回结果 } } } return list; //若遍历完了还没有结果就返回的是个空List }