【オファー】安全性および最大(新人と神の力とコードの考え)連続したサブ配列を証明します

トピックは、修正再表示しました:

HZは時折、それらの非コンピュータ科学の学生を点滅するために、いくつかの専門的な問題を取得します。テストグループが今日終了します後、彼が話した:旧一次元パターン認識では、ベクトルは正の整数であるときに最大と連続サブベクトルを計算する必要があることが多い、問題が解決しました。ベクターは、負の数が含まれている場合しかし、それは負の数を含んでおり、その横に正の数がそれを補うだろう期待できますか?例えば:{6、-3、-2,7、-15,1,2,2}、及び8の最大連続サブベクトル(アップ第三に、0から始まります)。その最大連続サブ配列にして返し、あなたは彼が住んでだまされてはいけないのだろうか?(サブベクトルの長さは1以上である)
ことを容易にします。比較しかし、人々は、私は質問にそれを行うのですか?

第1の書き込みと新人(新人は自分です)

ルーキーのアイデア:

1-最大値と初期化され、最大数は、アレイ内の最大です。
2-アレイは次いで、連続的組み合わせに配置され、2、3、... Nサブアレイ要素を含む得られた最大値に蓄積されます。
(アイデアは、アイデアはの大きさよりも列挙することで、何も言うことはありません)
ここに画像を挿入説明
コードを考えルーキー:


```java
class Solution {
public:
    int FindGreatestSumOfSubArray(vector<int> array) {
        int len = array.size();
        int result=array[0] ;
        int k = 1;
        if (len == 1) {
            return result;
        }
        else {
            for (int j = 0; j < len; j++) {
                if (array[j] > result)
                    result = array[j];
            }
            while (k <= len) {
                result = maxAdd(array, k,result);
                k++;
            }

        }
        return result;
    }

    int maxAdd(vector<int>array, int k,int res) {
        int l = array.size();
       // int res =0;
        //if(k=1)
        for (int i = 0; i <= l - k; ++i) {
            int tmp = 0;
            for (int j = 0; j < k; ++j) {
                tmp += array[i+j];
            }
            if (tmp > res)
                res = tmp;
        }
        return res;
    }
};

偉大な神のアイデア:

動的計画である偉大な神、のアイデアで深刻な表情。私は本当に感心ルーキーとしては、退行しました。私は無制限のゴミを感じます。
リンクします。https:?//www.nowcoder.com/questionTerminal/459bd355da1549fa8a49e350bf3df484 F =議論
出典:牛オフネットワーク

フラグの累積値、結果記録と最大記録
思想に基づく:数Aは、非負の累積数を残した場合、追加Aは以下A以上にすることができ、全体の累積値を考慮し、貢献しています。最初のいくつかの負の累積値ならば、現在の値を記録するためのフラグ、合計に有害と考えられています。
フラグが使用され、このとき、結果は、記録された結果よりも大きいです

ルーキー回復コード

int FindGreatestSumOfSubArray(vector<int> array) {
    int len = array.size();
    int result = array[0];
    if (len == 1)
        return result;
    else {
        int flag = array[0];
        for (int i = 1; i < len; ++i) {
            if (flag >= 0)
                flag += array[i];
            else
                flag = array[i];
            if (flag > result)
                result = flag;
        }
        return result;

    }
}

公開された57元の記事 ウォン称賛28 ビュー4118

おすすめ

転載: blog.csdn.net/weixin_41747893/article/details/104618247