分析
因为数组已经有序,我们可以发现,靠近两边的符合条件的值肯定是乘积小的。
import java.util.ArrayList;
public class Solution {
public ArrayList<Integer> FindNumbersWithSum(int [] array,int sum) {
ArrayList<Integer> list = new ArrayList<>();
//检查边界
if(array.length<=0 || sum < 0){
return list;
}
//最小值的开始索引
int smallIndex = 0;
//最大值的开始索引
int bigIndex = array.length-1;
while(smallIndex < bigIndex){
//找到相等的了
if(array[smallIndex] + array[bigIndex] == sum){
list.add(array[smallIndex] );
list.add(array[bigIndex]);
//跳出当前循环
break;
}
//两个数的和比sum小,就得将左边的索引增加,使sum增大
if(array[smallIndex] + array[bigIndex] < sum){
smallIndex++;
}else{//否则,将大的值减小,使sum减小。
bigIndex--;
}
}
return list;
}
}