思路
该数组是一个非递减顺序排列,找到相加两个数之和等于目标数。
我们可以使用两个指针来找到答案,需要利用非递减顺序这一个条件,使用双向双指针算法。
当大于target将指针j左移
当小于target将指针i右移
等于直接返回
代码
class Solution {
public int[] twoSum(int[] nums, int target) {
int n = nums.length;
int i = 0;
int j = n - 1;
while (true) {
int sum = nums[i] + nums[j];
if (sum == target) return new int[] {i + 1, j + 1};
else if (sum > target) j--;
else i++;
}
}
}