描述
这个题目说的是,给你一个整数数组,并且这个数组是按递增排序的,你要找到数组中的两个整数,它们的和等于给定的目标值,然后返回它们的下标。题目假设给你的数组总是有且只有一个解,而且同一个元素不能使用两次。另外,返回结果的下标要从 1 开始。
例如:[1, 2, 3, 6, 8, 11]
目标值是 10。那么,满足条件的两个整数是,2 和 8,它们的和是 10。所以你要返回它们在数组中的位置(索引+1)是 [2, 5]。
注意点
- 数组已经有序
- 没有必要使用双重循环
- 双指针即可
Tips
- 双指针"逼近"
代码引用
public class getTwoNumSumToGivenValue_Order {
/**
* T:O(n) S:(1)
*
* @param nums 给定有序数组
* @param target 给定目标值
*/
public int[] getTwoNumSumToGivenValue(int[] nums, int target) {
int i = 0, j = nums.length - 1;
while (i < j) {
if (nums[i] + nums[j] > target) {
j--;
} else if (nums[i] + nums[j] < target) {
i++;
} else {
return new int[]{i + 1, j + 1};
}
}
return new int[]{-1, -1};
}
}
网友评论