知識遷移能力-和為S的兩個數字
阿新 • • 發佈:2019-01-23
和為S的兩個數字
題目描述
輸入一個遞增排序的陣列和一個數字S,在陣列中查詢兩個數,是的他們的和正好是S,如果有多對數字的和等於S,輸出兩個數的乘積最小的。
輸出描述:
對應每個測試案例,輸出兩個數,小的先輸出。
import java.util.ArrayList;
public class Solution {
/*解題思路:查詢
數列滿足遞增,設兩個頭尾兩個指標i和j,
若ai + aj == sum,就是答案(距離越遠乘積越小)
若ai + aj > sum,aj肯定不是答案之一(前面已得出 i 前面的數已是不可能),j -= 1
若ai + aj < sum,ai肯定不是答案之一(前面已得出 j 後面的數已是不可能),i += 1
O(n)
*/
public ArrayList<Integer> FindNumbersWithSum(int [] array,int sum) {
ArrayList<Integer> list=new ArrayList<Integer>();
if(array==null||array.length<2){
return list;
}
int i=0;
int j=array.length-1;
while(i<j){
if (array[i]+array[j]==sum){
list.add(array[i]);
list.add(array[j]);
return list;
}else if(array[i]+array[j]>sum){
j--;
}else{
i++;
}
}
return list;
}
}