LeetCode解析 152 乘積最大子陣列

2021-10-05 17:43:09 字數 812 閱讀 4856

題目

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

示例 1:

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

輸出: 6

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

示例 2:

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

輸出: 0 解釋:

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

解析

我們先考慮都是正數的情況。dp_max[i] 的含義為最大值,dp_max[i] = math.max(nums[i-1],dp_max[i-1]*nums[i-1]),即 dp_max[i] 這個值只會在這兩者產生,要麼 乘上之前的會更大,要麼 捨棄前面的。

接下來考慮負數的情況,所以我們有必要維護乙個 dp_min,思路是一模一樣的,當遍歷的元素為負數時,我們只需要把 dp_max[i-1],dp_min[i-1]交換即可。

public

intmaxproduct

(int

nums)

int dpmax = nums[0]

;int dpmin = nums[0]

;int max = nums[0]

;for

(int i =

1; i < n; i++

)return max;

}

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