leetcode twopointer :和为s的两个数

O

问题

在这里插入图片描述

content

思路

  1. 递增的数列里面包含了一些信息。这道题暴力方法复杂度为N^2。 另外一种方法是固定左边, 右边根据target移动。但是这不是双指针的传统方法, 我们需要注意这道题让打印乘积最小的隐含条件是左边最小的一组。 因此采用类似二分查找的左右指针切换方法。
    coding
  • define ans vector ;
  • define left right
  • while()
    • sum = a[left] + a[right-1];
    • if sum== return
    • if sum> right --;
    • if < left ++;
  • return ans;

总结与反思

  1. vector使用api要熟练, 创建和塞入都不会。

代码实现

class Solution {
    
    
public:
   vector<int> FindNumbersWithSum(vector<int> array,int sum) {
    
    
       vector<int> ans;
       int left = 0, right = array.size();
       int temp = 0;
       while(left<right){
    
    
           temp = array[left]+ array[right-1];
           if(temp==sum){
    
    
               ans.push_back(array[left]);
               ans.push_back(array[right-1]);
               
               return ans;
           }
           else if(temp>sum)right--;
           else if(temp<sum)left++;
       }
       return ans;
       
   }
};

猜你喜欢

转载自blog.csdn.net/liupeng19970119/article/details/114005592
今日推荐