LEETCODE 152 乘積最大子陣列

2021-10-06 06:41:54 字數 739 閱讀 3411

給定乙個整數陣列nums,請你找出陣列中乘積最大的連續子陣列(該子陣列中至少包含乙個數字),並返回該子陣列所對應的乘積。

使用動態規劃方法。

最樸素的想法,需要將每一種子陣列都考慮到,即時間複雜度為o(n^2)

如何降低時間複雜度呢?最理想化的演算法也需要遍歷一次陣列,即o(n)

求相鄰陣列的最大值,在第i個位置只有兩種取值的可能性:

(1)取nums[i]值;

(2)nums[i-1]時的最大值與nums[i]相乘,即maxnum[i-1]*nums[i];

此題還有乙個特殊情況,就是陣列可以取負值,若nums[i]為負值,則最大值的取值兩種情況為:

(1)取nums[i]值;

(2)nums[i-1]時的最小值與nums[i]相乘,即minnum[i-1]*nums[i];

因此需要兩個陣列分別儲存陣列的最大值和最小值,以此來求出整個陣列的子區間最大值。

class

solution

else

max = math.

max(max,maxnum[i]);

}return max;

}}

時間複雜度:o(n)

空間複雜度:o(n)

Leetcode 152 乘積最大子串行

原題描述 找出乙個序列中乘積最大的連續子串行 該序列至少包含乙個數 例如,給定序列 2,3,2,4 其中乘積最大的子串行為 2,3 其乘積為6。解答 1.暴力搜尋 o n 2 沒有ac 超時 class solution return max 2.動態規劃思想,max min 每有乙個新的數字加入,...

Leetcode 152 乘積最大子串行

給定乙個整數陣列nums,找出乙個序列中乘積最大的連續子串行 該序列至少包含乙個數 示例 1 輸入 2,3,2,4 輸出 6解釋 子陣列 2,3 有最大乘積 6。示例 2 輸入 2,0,1 輸出 0解釋 結果不能為 2,因為 2,1 不是子陣列。這裡用動態規化的方法,即dp i 為以i結尾乘積最大連...

leetcode152 乘積最大子串行

給定乙個整數陣列 nums 找出乙個序列中乘積最大的連續子串行 該序列至少包含乙個數 示例 1 輸入 2,3,2,4 輸出 6 解釋 子陣列 2,3 有最大乘積 6。示例 2 輸入 2,0,1 輸出 0 解釋 結果不能為 2,因為 2,1 不是子陣列。用三個變數分別記錄最大值,到之前乙個數的最大值和...