LeetCode 167. 兩數之和 II - 輸入有序數組

題目: 

  給定一個已按照升序排列 的有序數組,找到兩個數使得它們相加之和等於目標數。數組

  函數應該返回這兩個下標值index1 和 index2,其中 index1 必須小於 index2函數

  說明:spa

  • 返回的下標值(index1 和 index2)不是從零開始的。
  • 你能夠假設每一個輸入只對應惟一的答案,並且你不能夠重複使用相同的元素。

  示例:指針

 輸入: numbers = [2, 7, 11, 15], target = 9 code

 輸出: [1,2] blog

 解釋: 2 與 7 之和等於目標數 9 。所以 index1 = 1, index2 = 2 。  get

思路:

  尋找目標元素和,能夠適用雙指針,兩元素首先定在兩端,兩數之和不斷和目標值比較:class

  • 兩數之和小於目標值,左指針右移;
  • 兩數之和大於目標值,右指針左移;
  • 兩數之和等於目標值,求得結果。

  兩指針在每輪比較後不斷向目標值靠近,最終獲得結果。di

代碼:

public class P167 {
    public int[] twoSum(int[] numbers, int target) {
        int[] result = new int[2];
        if (numbers.length < 2) {
            return result;
        }
        int left = 0;
        int right = numbers.length - 1;
        int curSum = 0;
        while (left < right) {
            curSum = numbers[left] + numbers[right];
            if (curSum < target) {
                left++;
            } else if (curSum > target) {
                right--;
            } else {
                result[0] = left + 1;
                result[1] = right + 1;
                break;
            }
        }
        return result;
    }
}
相關文章
相關標籤/搜索