LeetCode 152 乘積最大子陣列

2021-10-04 19:51:30 字數 727 閱讀 4210

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

示例 1:

輸入: [2,3,-2,4]

輸出: 6

解釋: 子陣列 [2,3] 有最大乘積 6。

示例 2:

輸入: [-2,0,-1]

輸出: 0

解釋: 結果不能為 2, 因為 [-2,-1] 不是子陣列。

我們嘗試用動態規劃來解決這個問題,設立乙個陣列,dp[i]表示包括nums[i]在內連續子陣列的最大乘積,然後我們要建立轉移方程,而狀態轉移方程就是該問題的難點所在。如何建立該方程,我們首先要看怎樣得到最大乘積。nums[i]在內的最大乘積,可能是nums[i]本身,還可能是與前面的乘積。這時候,我們注意到乙個問題,比如,dp[2](下標從0開始)明顯等於6,dp[3]應該等於36,並不是-3與6相乘得來的。我們可以分類討論一下,如果nums[i]是正數,我們需要的是前面連續乘積的最大值,如果nums[i]是負數,我們需要的是前面連續乘積的最小值!所以我們把dp分為兩部分,dp_max[i]記錄包括nums[i]在內連續陣列的最大值,dp_min[i]記錄包括nums[i]在內連續陣列的最小值。這樣就方便建立狀態轉移方程了。

這個題與一般動歸不同的是定義了兩個動態規劃的陣列,有些意思。當然也可以不用陣列,換成變數。

class solution 

return max_val;

}};

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 不是子陣列。用三個變數分別記錄最大值,到之前乙個數的最大值和...