LeetCode 167 兩數之和(雙指標)

2021-10-08 20:16:59 字數 1188 閱讀 1739

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

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

說明:返回的下標值(index1 和 index2)不是從零開始的。

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

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

輸出: [1,2]

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

首先想到的是hash表,但是沒有用到陣列有序的條件,而且hash還要陣列下標,比較麻煩。

在考慮用乙個for迴圈加對分查詢,時間複雜度o(nlongn),這個速度還是可以接受。

在看了官方解答以後,發現了乙個時間複雜度為o(n)的解法。

我們主要討論最後一種解法。

1,設立兩個指標head和tail,分別指向原陣列的頭和尾。

2,因為是有序陣列,所以直接將

(numbers【head】+numberstail【tail】)和target比較,如果target大,將(numbers【head】+numberstail【tail】)的值縮小,所以將tail–,同理,如果target小,將(numbers【head】+numberstail【tail】)的值增大,head++。

3,因為每次題目保證數一定存在,從兩邊迫近逐步,一定有一邊先找到目標,當一邊的目標定了,另一邊便會不斷移動直到找到目標。可以推出時間複雜度為o(n)。

int

*twosum

(int

* numbers,

int numberssize,

int target,

int* returnsize)

*returnsize=2;

arr=

(int*)

malloc

(sizeof

(int)*

2); arr[0]

=head+1;

arr[1]

=tail+1;

return arr;

}

LeetCode 167 兩數之和

給定乙個已按照公升序排列 的有序陣列,找到兩個數使得它們相加之和等於目標數。函式應該返回這兩個下標值 index1 和 index2,其中 index1 必須小於 index2。說明 返回的下標值 index1 和 index2 不是從零開始的。你可以假設每個輸入只對應唯一的答案,而且你不可以重複使...

LeetCode167 兩數之和II

1.題目描述 給定乙個已按照公升序排列 的有序陣列,找到兩個數使得它們相加之和等於目標數。函式應該返回這兩個下標值 index1 和 index2,其中 index1 必須小於 index2。說明 返回的下標值 index1 和 index2 不是從零開始的。你可以假設每個輸入只對應唯一的答案,而且...

LeetCode 167 兩數之和II

題目 給定乙個已按照公升序排列 的有序陣列,找到兩個數使得它們相加之和等於目標數。函式應該返回這兩個下標值 index1 和 index2,其中 index1 必須小於 index2。說明 返回的下標值 index1 和 index2 不是從零開始的。你可以假設每個輸入只對應唯一的答案,而且你不可以...