要求
- 升序数组
- 找到两个数使得它们相加之和等于目标数
- 函数返回两个下标值(下标从1开始)
示例
- 输入:numbers = [2, 7, 11, 15], target = 9
- 输出:[1,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