劍指offer -- 和為 S 的兩個數字
阿新 • • 發佈:2018-11-05
題目描述
輸入一個遞增排序的陣列和一個數字S,在陣列中查詢兩個數,使得他們的和正好是S,如果有多對數字的和等於S,輸出兩個數的乘積最小的。
AC程式碼
思路雖然很簡單,但是需要注意的地方有很多。
繼續努力。
import java.util.ArrayList;
public class Solution {
public ArrayList<Integer> FindNumbersWithSum(int [] array,int sum) {
if(array == null && array.length <= 1) return null;
ArrayList<Integer> resList = new ArrayList<>();
int product = Integer.MAX_VALUE; // 1
int low = 0;
int high = array.length - 1;
Integer num1 = null; //2
Integer num2 = null; //2
while(low < high){
if(array[ low] + array[high] == sum){
if(array[low] * array[high] < product){
num1 = array[low];
num2 = array[high];
product = num1 * num2;
}
low++; //3
high--; //3
}
else if(array[low] + array[high] < sum) low++;
else high--;
}
if(num1 != null && num2 != null){ //4
resList.add(num1);
resList.add(num2);
}
return resList;
}
}