高階指南 最大子串行

2021-10-12 10:06:14 字數 550 閱讀 9073

暴力思想就是求字首和,然後從左到右列舉終點,暴力得以每個點為終點的前m個數的和的最大值

優化第二步,從左到右是有順序的,我們可以考慮維護乙個佇列,每次將乙個點的字首和扔進去,到某個點時,看看前面m個裡的最小字首和即可,而當我們扔數的時候,又發現,扔乙個數進去,如果它比佇列裡面的一些數大,則前面那些比它大的數則永遠不可能再用到,所以可以把比它大的數扔出去,而這個樣子,就成了乙個單調佇列,那麼前面m個的最小字首和是哪個?隊頭!就變成o(n)了

#include using namespace std;

typedef long long ll;

const int ma = 3e5+10;

const ll inf_min = -1e18;

ll s[ma],q[ma];//s為字首和,q為單調佇列,存位置

int main()

ll r = 0,l = 0,res = s[1];

for (int i = 1; i <= n; i++)

cout

}

乘積最大子串行 高階 leetcode

給定乙個整數陣列nums,找出乙個序列中乘積最大的連續子串行 該序列至少包含乙個數 示例 1 輸入 2,3,2,4 輸出 6解釋 子陣列 2,3 有最大乘積 6。示例 2 輸入 2,0,1 輸出 0解釋 結果不能為 2,因為 2,1 不是子陣列。這個題和前面的最大和子串行很相似,也可以達到o n 的...

最大子串行

模板 int maxsubsequence const int a,int n return maxsum 複雜度on 給定k個整數的序列,其任意連續子串行可表示為,其中 1 i j k。最大連續子串行是所有連續子串行中元素和最大的乙個,例如給定序列,其最大連續子串行為,最大和 為20。在今年的資料...

最大子串行

最大子串行是要找出由數組成的一維陣列中和最大的連續子串行。比如的最大子串行就是 它的和是8,達到最大 而 的最大子串行是,它的和是6。你已經看出來了,找最大子串行的方法很簡單,只要前i項的和還沒有小於0那麼子串行就一直向後擴充套件,否則丟棄之前的子串行開始新的子串行,同時我們要記下各個子串行的和,最...