1. 程式人生 > 其它 >167. 兩數之和 II - 輸入有序陣列(LeetCode)

167. 兩數之和 II - 輸入有序陣列(LeetCode)

  • 題目描述

給定一個已按照升序排列的整數陣列numbers ,請你從陣列中找出兩個數滿足相加之和等於目標數target 。

函式應該以長度為2的整數陣列的形式返回這兩個數的下標值。numbers 的下標從1開始計數 ,所以答案陣列應當滿足 1 <= answer[0] < answer[1] <= numbers.length 。

你可以假設每個輸入只對應唯一的答案,而且你不可以重複使用相同的元素。


  • 題目條件分析
  1. 陣列升序有序;
  2. 陣列元素不重複;
  3. 答案唯一;
  4. 下標從1開始;

  • 解題思路(雙指標碰撞)
  1. 要充分利用陣列升序排列的性質,可從陣列兩頭left和right進行查詢,如果和大於target,說明right要減小,如果和小於target,說明left要增加;
  2. 返回結果時,要將陣列的下標加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};
    }