牛客網刷題之和為S的兩個數字
阿新 • • 發佈:2018-12-31
題目描述:
解題思路:
既然是排序的,當然優先考慮二分法,分別用兩個指標分別指向左邊第一個位置和右邊第一個位置,左右逼近,當左邊的位置大於等於右邊的位置即可。題目要求是先輸出乘積小的,由於我們每次先得到的都是一個小點的數和一個大點的數,故而和相等的情況下,乘積必定是最小的。
題解:
public ArrayList<Integer> FindNumbersWithSum(int [] array,int sum) {
ArrayList<Integer> list = new ArrayList<>();
if (array == null || array.length < 2){
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){
right--;
}else{
left++;
}
}
return list;
}