給定一個已按照升序排列 的有序數組,找到兩個數使得它們相加之和等于目标數。
函數應該傳回這兩個下标值 index1 和 index2,其中 index1 必須小于 index2。
說明:
傳回的下标值(index1 和 index2)不是從零開始的。
你可以假設每個輸入隻對應唯一的答案,而且你不可以重複使用相同的元素。
示例:
輸入:
numbers = [2, 7, 11, 15], target = 9
輸出:
[1,2]
class Solution {
public int[] twoSum(int[] numbers, int target) {
int length = numbers.length;
// 0<index1<index2<length
int index1 = 0;
int index2 = length - 1;
int[] result = new int[2];
while(index1<index2){
//相加小于目标值,index1右移,對應數值增大
if(numbers[index1]+numbers[index2] < target){
index1++;
}else if(numbers[index1]+numbers[index2] > target){
//相加大于目标值,index2左移,對應數值減小
index2--;
}else{
//根據題目要求
result[0] = index1+1;
result[1] = index2+1;
break;
}
}
return result;
}
}
-
雙指針
初始化兩個指針,index1指向最小元素(該數組是有序數組),即index1指向數組第一個元素,index2指向最大元素(數組最後一個元素)
比較思路:
- 當兩指針對應的值相加小于目标值,則移動index1指針,增大數值
- 當兩指針對應的值相加大于目标值,則移動index2指針,減小數值
- 當兩指針對應的數值相加等于目标值,則是最後結果