1.题目
输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,则输出任意一对即可。
2.思路
由于是有序的数组
1.双指针法,一个指向low,一个指向high。
如果s<nums[low]+nums[high],high-1;
如果s>nums[low]+nums[high],low+1;
如果s=nums[low]+nums[high],返回数组{nums[low],nums[high]};
当low=high时跳出循环。
3.复杂度
时间复杂度O(N),空间复杂度O(1)
4.代码
class Solution {
public int[] twoSum(int[] nums, int target) {
int low=0,high=nums.length-1;
while(low<high){
if(target<(nums[low]+nums[high]))
high--;
else if(target>(nums[low]+nums[high]))
low++;
else
return new int[] {nums[low],nums[high]};
}
return new int[0];
}
}