双指针
:首位指针向数组中间进行推进,
package KTwoPointers;
/**
* @Author Zhou jian
* @Date 2020 ${month} 2020/5/5 0005 11:41
* 两数之和----输入有序数组
* 使用双指针,一个指针指向较小的元素,一个指向值较大的元素,指向较小的元素的指针从头向尾遍历
* 如果两个指针指向元素的和 sum == targetsum==target,那么得到要求的结果;
如果 sum > targetsum>target,移动较大的元素,使 sumsum 变小一些;
如果 sum < targetsum<target,移动较小的元素,使 sumsum 变大一些
指向较大的元素的指针从尾相投遍历
*
*/
public class Problem167 {
public int[] twoSum(int[] numbers, int target) {
int[] rs = new int[2];
//定义两个指针,从两端向中间逼近
int left = 0;
int right = numbers.length-1;
while(left<right){
//计算两个数的和
int sum = numbers[left]+numbers[right];
//两数==target
if(sum==target){
rs[0]=left+1;
rs[1]=right+1;
return rs;
}else if(sum<target){
left++;
}else if(sum>target){
right--;
}
}
return rs;
}
}