[演算法]和為S的兩個數字
阿新 • • 發佈:2019-01-10
題目描述
輸入一個遞增排序的陣列和一個數字S,在陣列中查詢兩個數,使得他們的和正好是S,如果有多對數字的和等於S,輸出兩個數的乘積最小的。
對應每個測試案例,輸出兩個數,小的先輸出。
思路
定義兩個指標,分別從前面和後面進行遍歷。間隔越遠乘積越小,間隔越近乘積越大,所以最先出現的兩個數乘積最小。
程式碼
import java.util.ArrayList; public class Solution { public ArrayList<Integer> FindNumbersWithSum(int [] array,int sum) { ArrayList<Integer> list = new ArrayList<>(); if(array == null || array.length == 0){ return list; } int left = 0; int right = array.length - 1; while(left < right){ if(array[left] + array[right] == sum){ list.add(array[left]); list.add(array[right]);return list; }else if(array[left] + array[right] < sum){ left++; }else{ right--; } } return list; } }