167. 兩數之和 II - 輸入有序陣列(LeetCode)
阿新 • • 發佈:2021-07-08
- 題目描述
給定一個已按照升序排列的整數陣列numbers ,請你從陣列中找出兩個數滿足相加之和等於目標數target 。
函式應該以長度為2的整數陣列的形式返回這兩個數的下標值。numbers 的下標從1開始計數 ,所以答案陣列應當滿足 1 <= answer[0] < answer[1] <= numbers.length 。
你可以假設每個輸入只對應唯一的答案,而且你不可以重複使用相同的元素。
- 題目條件分析
- 陣列升序有序;
- 陣列元素不重複;
- 答案唯一;
- 下標從1開始;
- 解題思路(雙指標碰撞)
- 要充分利用陣列升序排列的性質,可從陣列兩頭left和right進行查詢,如果和大於target,說明right要減小,如果和小於target,說明left要增加;
- 返回結果時,要將陣列的下標加1後再進行返回;
- 編碼如下
public int[] twoSum(int[] numbers, int target) { int left = 0; int right = numbers.length - 1; int sum = 0; while(left < right) { sum = numbers[left] + numbers[right]; if (sum == target) { return new int[] {left+1, right+1}; } else if (sum > target) { right--; } else { left++; } } return new int[] {-1, -1}; }