雙指針
:首位指針向數組中間進行推進,
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;
}
}