给定一个有序整型数组和一个整数target,在其中寻找两个元素,使其和为target。返回这两个数的索引。
- 如numbers = [2, 7, 11, 15], target = 9
- 返回数字2, 7的索引1, 2 (索引从1开始计算)
思路一:使用暴力解法,两重for循环
思路二:对撞指针,即用两个指针,left = 0, right = length - 1从两边出发
target和两个指针的和(sum)对比,分三种情况
1、如果 sum == target,则成功找到目标数据
2、如果 sum > target,则right --
3、如果 sum < target,则left++
java
public class Test02_167_001 {
public static void main(String[] args) {
int[] ret = twoSum(new int[]{2, 7, 11, 15}, 29);
System.out.println(Arrays.toString(ret));
}
public static int[] twoSum(int[] arr, int target) {
int left = 0;
int right = arr.length - 1;
while (left < right) {
int sum = arr[left] + arr[right];
if (sum == target) {
return new int[]{left, right};
} else if (sum < target) {
left++;
} else { // sum > target
right--;
}
}
return new int[]{};
}
}