輸入一個遞增排序的數組和一個數字S,在數組中查找兩個數,使得他們的和正好是S,若是有多對數字的和等於S,輸出兩個數的乘積最小的。
輸出描述: 對應每一個測試案例,輸出兩個數,小的先輸出。java
符合條件的答案中,距離最遠的一對數字的乘積最小(周長固定的矩形中正方形面積最大),設置左右指針往中間逼近。
時間複雜度O(n),空間複雜度O(1)。數組
import java.util.ArrayList; public class Solution { public ArrayList<Integer> FindNumbersWithSum(int [] array,int sum) { ArrayList<Integer> list = new ArrayList<Integer>(); if(array == null || array.length == 0) return list; int left = 0, right = array.length - 1; int curr = 0; while(left < right) { curr = array[left] + array[right]; if(curr == sum) { list.add(array[left]); list.add(array[right]); break; } else if(curr < sum) { left++; } else { right--; } } return list; } }