要求
- 升序数组
- 找到两个数使得它们相加之和等于目标数
- 函数返回两个下标值
示例
- numbers = [2, 7, 11, 15], target = 9
- [1,2]
- index1 = 1, index2 = 2
思路
- 双重遍历(n2)
- 遍历+二分搜索(nlogn)
- 遍历,对撞指针(n)
代码
1 class Solution{ 2 public: 3 vector<int> twoSum(vector<int>& numbers, int target){ 4 5 int l = 0, r = numbers.size()-1; 6 while( l < r ){ 7 8 if(numbers[l]+numbers[r]==target){ 9 int res[2] = {l+1, r+1}; 10 return vector<int>(res,res+2); 11 } 12 else if(numbers[l]+numbers[r]<target) 13 l++; 14 else 15 r--; 16 } 17 throw invalid_argument("no solution."); 18 } 19 };
类似问题
- 125 Valid Palindrome
- 344 Reverse String
- 345 Reverse Vowels of a String
- 11 Container With Most Water