leetcode twopointer:合計がsである2つの数値

THE

問題

ここに画像の説明を挿入

コンテンツ

アイデア

  1. 増加するシーケンスには、いくつかの情報が含まれています。この質問に対する暴力の方法の複雑さはN ^ 2です。別の方法は、左側を固定し、ターゲットに応じて右側を移動することです。しかし、これは従来のダブルポインタの方法ではありません。最小の印刷製品の暗黙の条件が左側の最小のセットであるという問題に注意する必要があります。そのため、二分探索と同様の左右ポインタ切り替え方式を採用しています。
    コーディング
  • ansベクトルを定義します;
  • 左右を定義する
  • while()
    • 合計= a [左] + a [右-1];
    • sum == returnの場合
    • 合計>右の場合-;
    • if <左++;
  • ansを返します。

まとめと考察

  1. ベクターはAPIの使用に習熟している必要があり、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