兩數之和II 輸入有序陣列

2021-10-08 09:21:10 字數 1226 閱讀 1445

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

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

說明:

示例

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

輸出: [1,2]

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

暴力法,直接兩層for迴圈,找到target,但是最後發現時間複雜度太高,為o(n^2)。無法滿足題目的要求。

class solution 

for(int i=0;i第二次改變思路,當兩次求得值已經計算過,那就直接計算下一次。

class solution

int used_1;

int used_2;

if(numbers.size()==2 && (numbers[0]+numbers[1]==target))

for(int i=0;i第三次在看了答案之後裁只要要用雙指標來做,可惜了,上次練習leetcode還是好久以前,都忘了。期間還把result和numbers弄混了,導致程式一開始就返回,得不到正確的結果。

**為:

class solution

int left = 0;

int right = numbers.size()-1;

while(lefttarget)

else

}return result;

}};

在答案的基礎上進行改進,上次只是在兩數之和大於或小於的時候減一或加一,可採用二分法的思想,直接跳到中位值。但是中途遇到了問題,二分法適用於查詢1個目標,這裡有2個目標,所以要轉換思路,求解1個目標才行。還要注意while迴圈條件要為left<=right才行,如果沒有等於,就相當於left=right時,numbers[i]和numbers[mid]沒有進行相加,無法得到正確的答案

class solution 

; }

else if (numbers[mid] + numbers[i] > target)

else}}

return {};

}};

兩數之和 II 輸入有序陣列

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

兩數之和 II 輸入有序陣列

給定乙個已按照公升序排列的有序陣列,找到兩個數使得它們相加之和等於目標數。函式應該返回這兩個下標值index1 和 index2,其中 index1 必須小於 index2。說明 示例 輸入 numbers 2,7,11,15 target 9 輸出 1,2 解釋 2 與 7 之和等於目標數 9 因...

兩數之和 II 輸入有序陣列

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