题目描述:输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。
思路:最慢的方法是固定一个数字,然后一次遍历数组得到和为s的另一个数字,但这种算法时间复杂度太高。因为数组是已经排序的,可以先在数组中选择两个数字,如果它们的和等于输入的s,就找到了要找的数字,如果它们的和小于s,则可以让较小的数字往后移动,如果它们的和大于s,则可以让较大的数字向前移动,知道和等于输入的s为止。
import java.util.ArrayList;
public class Solution {
public ArrayList<Integer> FindNumbersWithSum(int [] array,int sum) {
ArrayList<Integer> result = new ArrayList<Integer>();
if(array == null || array.length < 2){
return result;
}
int length = array.length;
int leftNum = 0;
int rightNum = length-1;
while(leftNum < rightNum){
if((array[leftNum]+array[rightNum]) == sum){
break;
}else if((array[leftNum]+array[rightNum]) < sum){
leftNum = leftNum+1;
}else{
rightNum = rightNum - 1;
}
}
if(leftNum < rightNum){
result.add(array[leftNum]);
result.add(array[rightNum]);
}
return result;
}
}