[]移行顔の質問57の知識オファー安全性を証明するために:閉じる二つの図のです

タイトル説明

インクリメント入力とデジタルソートされた配列のSは、アレイ内の2つの数値を見つけ、それらが正確であることS、および複数桁の数字は、S、両者の最小数の出力の積に等しい場合。

思考

我々は、[右]最初の二つの数字のような二つの数およびt = A + [右] [左]ことを第一のデジタル配列A [左]、配列の最後の数を選択することができます。T == sの場合は、数2に戻ります。配列が増加しているので、我々は、トンを増やす必要があること、T <sの場合は、左のように、++(右列の最後に、増加し続けることができない)トンを大きくすることができます。T> sが、我々はトンを削減する必要がある場合は、それがright--です。このプロセスは、左> =右まで繰り返されます。コードは以下の通りであります:

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

アルゴリズムの時間計算量はO(N)です。

おすすめ

転載: www.cnblogs.com/flix/p/12525341.html