我来一个java的题解

输出描述限制了: 如果结果有多个 则输出乘积小的

  1. 我觉得这是间接提醒: 逆着遍历数组来求解
  2. 因为我们知道(别问我怎么知道)如果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
     }