LeetCode :. 1013パーティション配列に三つの部分と同等の合計(及びアレイが3等分されます)

タイトル

オリジナルタイトルリンク

アルゴリズム

  • 確かに暴力的なアルゴリズムがタイムアウトは、アレイが3分割され、2本の線形時間指を使用して実現することができます
  • 最初のポインタを設定します = 0 私は= 0 、第2のポインタ J = A S から e ( ) 1 J = A.size() - 1 次決意条件運針
  • アレイ素子は、正と負の両方を持っているので、我々は移動するポインタを決定するための方法の大きさを比較することはできませんので、我々はその結果から直接開始し、等しいがある場合とありません 1 / 3 1/3 それが上に移動することができないまで、私たちは、ポインタを移動します
  • 最終的な判定条件、注意がなければなりません i + 1 < j I + 1 <J

ACコード(C ++)

class Solution {
public:
    bool canThreePartsEqualSum(vector<int>& A) {
        int i=0;
        int j=A.size()-1;
        int sum=0;
        for(int m=0;m<A.size();m++)
            sum=sum+A[m];
        if(sum%3!=0)
            return false;
        int arg=sum/3;
        int S1=A[i];
        int S3=A[j];
        while(arg!=S1&&i<A.size()-1)
        {
            i++;
            S1=S1+A[i];
        }
        while(arg!=S3&&j>0)
        {
            j--;
            S3=S3+A[j];
        }
        if(i+1<j&&S1==arg&&S3==arg)
            return true;
        return false;
    }
};
公開された68元の記事 ウォン称賛7 ビュー2857

おすすめ

転載: blog.csdn.net/wofanzheng/article/details/104310067