题目描述
输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,则输出任意一对即可。
思路:
数组是递增有序的,可以用双指针的做法。
定义两个指针,一个指向数组的第一个元素,另一个指向数组的最后一个元素,然后求和,如果和大,第二个指针像前移动,如果和小,第二个指针像后移动。如果相等,返回两个数字是一个一维数组,如果没找到返回null.
class Solution {
public int[] twoSum(int[] nums, int target) {
//特判
if(nums == null || nums.length == 0) return null;
//定义两个指针,一个指向数组的第一个元素,一个指向最后一个元素
int i = 0,j = nums.length - 1;
while(i < j){
int sum = nums[i] + nums[j];//用sum存储两个数字的和。
if(sum < target){//和小于目标值,i后移
i++;
}else if(sum > target){//和大于目标值,j前移
j--;
}else{
return new int []{nums[i],nums[j]};//相等返回两个数字
}
}
return null; //没找到返回null
}
}