- 兩數之和 II - 輸入有序數組
給你一個下標從 1 開始的整數數組 numbers ,該數組已按 非遞減順序排列 ,請你從數組中找出滿足相加之和等于目標數 target 的兩個數。如果設這兩個數分別是 numbers[index1] 和 numbers[index2] ,則 1 <= index1 < index2 <= numbers.length 。
以長度為 2 的整數數組 [index1, index2] 的形式返回這兩個整數的下標 index1 和 index2。
你可以假設每個輸入 只對應唯一的答案 ,而且你 不可以 重復使用相同的元素。
你所設計的解決方案必須只使用常量級的額外空間。
示例 1:
輸入:numbers = [2,7,11,15], target = 9
輸出:[1,2]
解釋:2 與 7 之和等于目標數 9 。因此 index1 = 1, index2 = 2 。返回 [1, 2] 。
class Solution {
public:vector<int> twoSum(vector<int>& numbers, int target) {for(int i = 0; i < numbers.size(); i++) {int low = i + 1, high = numbers.size() - 1;while(low <= high) {int mid = (low + high) / 2;if(numbers[mid] == target - numbers[i]) {return {i+1, mid+1};} else {if(target - numbers[i] > numbers[mid]) {low = mid + 1;} else {high = mid - 1;}}}}return {-1, -1};}
};