剑指 Offer 57. 和为s的两个数字
输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,则输出任意一对即可。
既然是递增数组,那么我们可以利用双指针来做这道题。
指针 i 指向数组首位数字,指针 j指向数组末位数字。
若两数字之和大于了 target,则指针 j往左移一位。
若两数字之和小于了 target,则指针 i 往右移一位。
若两数字之和等于了 target,返回结果 [i, j]即可。
class Solution {
public int[] twoSum(int[] nums, int target) {
int i = 0,j= nums.length-1; //定义双指针
while(i<j){ //控制循环结束条件
int s = nums[i]+nums[j];
if(s<target) i++;
else if(s>target) j--;
else return new int[]{nums[i],nums[j]};
}
return new int[0];
}
}