题目描述
题目分析
- 给定的数组时顺序排列的
- 使用暴力法,双重循环,逐个相加,直到相等就退出循环返回结果
- 使用双指针法,一个从头部开始移动,一个从尾部开始移动;核心思想就是:
当两个指针指向的值相加的和大于目标值时,尾部指针前移,让和变小,当两个指针相加的值相加的和小于目标值时,头部指针后移,让和变大。
解法分析
- 使用while循环,直到头指针和尾指针相遇,若仍没有相等,则返回空结果
- 因为题目中提到不可以使用重复的元素,所以
头指针和尾指针重合的情况也要剔除掉
,即不能相等,也不能越过
代码
class Solution {
public int[] twoSum(int[] numbers, int target) {
int head = 0;
int end = numbers.length-1;
while (head < end){
int temp = numbers[head] + numbers[end];
if (temp == target){
return new int[]{head+1, end+1};
} else if (temp > target) {
end--;
} else {
head++;
}
}
return new int[] {};
}
}