給定乙個整數陣列nums
,找出乙個序列中乘積最大的連續子串行(該序列至少包含乙個數)。
示例 1:
輸入:[2,3,-2,4]輸出:6解釋:子陣列 [2,3] 有最大乘積 6。示例 2:
輸入:[-2,0,-1]輸出:0解釋:結果不能為 2, 因為 [-2,-1] 不是子陣列。此題比之前那道求連續最大子序和的題要複雜,如果還按照那種套路做就是錯的,因為乘積可以變號。所以這道題我們需要定義2個dp陣列,乙個是dpmax,代表以各位置結束的乘積最大子串行;另乙個是dpmin,代表以各位置結束的乘積最小子序列。兩個陣列的首元素都是nums[0]。我們從標號1開始遍歷求兩個dp陣列。先求dpmax[i]:如果nums[i]大於0,並且dpmax[i-1]也大於0,那麼dpmax[i] = dpmax[i-1] * nums[i];如果nums[i] < 0,並且dpmin[i-1] <= 0,那麼dpmax[i] = dpmin[i-1] * nums[i];否則剩下的其他情況都是dpmax[i] = nums[i]。接下來求dpmin[i]:如果nums[i] > 0並且dpmin[i-1] <= 0,那麼dpmin[i] = dpmin[i-1] * nums[i];如果nums[i] < 0並且dpmax[i-1] > 1,那麼dpmin[i] = dpmax[i-1] * nums[i];否則剩下的其他情況都是dpmin[i] = nums[i]。然後我們用dpmax[i]更新ans。如此迴圈直到兩個dp陣列都求完,最後返回ans。
class solution
return ans;
}};
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 不是子陣列。用三個變數分別記錄最大值,到之前乙個數的最大值和...