[刷题] 167 Two Sum II

要求

  • 升序数组
  • 找到两个数使得它们相加之和等于目标数
  • 函数返回两个下标值(下标从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 };
View Code

相关

  • 125 Valid Palindrome 
  • 344 Reverse String
  • 345 Reverse Vowels of a String
  • 11 Container With Most Water
posted @ 2020-03-28 08:38  cxc1357  阅读(107)  评论(0编辑  收藏  举报