乘積最大子串行
給定乙個整數陣列 nums ,找出乙個序列中乘積最大的連續子串行(該序列至少包含乙個數)。
輸入: [2,3,-2,4]輸出: 6
解釋: 子陣列 [2,3] 有最大乘積 6。
輸入: [-2,0,-1]不用dp陣列,維護乙個到當前位置i的最大值輸出: 0
解釋: 結果不能為 2, 因為 [-2,-1] 不是子陣列。
mmax
和最小值mmin
。
這裡mmax
和mmin
都是到當前i
為止,區間[k,i]的最大值和最小值,k是不確定的,但i是一定的,也就是一定會由nums[i]
作用。這樣保證了子串行的連續性。
然後對於每一次迭代,更新res
。就得到了到所有位置為止的最大值。
class solution
else
res=
max(res,mmax);}
return res;}}
;
至少有k個重複字元的最長子字串
找到給定字串(由小寫字元組成)中的最長子串 t , 要求 t 中的每一字元出現次數都不少於 k 。輸出 t 的長度。
輸入:s = 「aaabb」, k = 3
輸出:3
最長子串為 「aaa」 ,其中 『a』 重複了 3 次。
輸入:滿足條件的最長子串dp思路可以總結一下,即兩遍遍歷,第一遍i:0s = 「ababbc」, k = 2
輸出:5
最長子串為 「ababb」 ,其中 『a』 重複了 2 次, 『b』 重複了 3 次。
−>
ni:0->n
i:0−
>
n,第二遍j:i
−>
nj:i->n
j:i−
>n或j:i
−>
0j:i->0
j:i−
>0。
第二遍遍歷時,用到dp陣列,dp[
i][j
]dp[i][j]
dp[i][
j]的子問題條件是否成立,若成立,則在這個基礎上更新答案max
(res
,dp[
i][j
]+..
.)
max(res,dp[i][j]+...)
max(re
s,dp
[i][
j]+.
..),同時每步要視題目更新[i,
j]
[i,j]
[i,j
]區間的條件狀態。
這道題的難點是怎麼給乙個子串計數,看它每個字元出現的次數。
解法是使用mask,用位運算更新。每一位代表這個字元對應的狀態,1是不夠k次,0是夠k次。若mask是0,表示所有位都是0,即目前為止出現的所有字元都滿足條件。
class solution
} i=max_idx+1;
}return res;}}
;
最大子串行問題
問題描述 輸入一組整數,求出這組數字子串行和中最大值。也就是只要求出最大子串行的和,不必求出最大的那個序列。例如 序列 2 11 4 13 5 2,則最大子串行和為20。複雜度為o n 2 的演算法 include include int maxsubseqsum const int a,int n...
最大子串行問題
現在我們將敘述兩個演算法來求解最大子串行和問題 include int maxsubsequencesum int a,int n int main printf max d maxsubsequencesum a,15 return0 int maxsubsequencesum int a 15 ...
最大子串行問題
題目 給定乙個整數列 可能有負數 求該整數列每個子串行的和的最大值,如果都為負數則結果為0 例如 對於輸入 2,11,4,13,5,2 答案為20 從11 到 13,即就是 11 4 13 20 粗略 如下 已測試通過 include using namespace std arr 目標陣列,len...