題目
給定乙個整數陣列 nums ,找出乙個序列中乘積最大的連續子串行(該序列至少包含乙個數)。
示例 1:
輸入: [2,3,-2,4]
輸出: 6
解釋: 子陣列 [2,3] 有最大乘積 6。
示例 2:
輸入: [-2,0,-1]
輸出: 0
解釋: 結果不能為 2, 因為 [-2,-1] 不是子陣列。
思路1
雙重迴圈進行遍歷,超時。
思路2動態規劃,只需遍歷一遍陣列,針對陣列中的每個元素記錄乙個最大值和乙個最小值。最大值由這個元素、這個元素與上次記錄的最大值乘積、這個元素與上次記錄的最小值乘積這三個數值的最大值構成。最小值由這個元素、這個元素與上次記錄的最大值乘積、這個元素與上次記錄的最小值乘積這三個數值的最小值構成。每次遍歷取上次最大值結果與本次最大值這兩個數值的最大作為結果。
**
class solution
int maxnum=nums[0];
int minnum=nums[0];
int res=nums[0];
for(int i=1;ib)
return b;
}public int min(int a,int b)
return a;
}}
152 乘積最大子串行
給定乙個整數陣列 nums 找出乙個序列中乘積最大的連續子串行 該序列至少包含乙個數 示例 1 輸入 2,3,2,4 輸出 6 解釋 子陣列 2,3 有最大乘積 6。示例 2 輸入 2,0,1 輸出 0 解釋 結果不能為 2,因為 2,1 不是子陣列。記錄每一處為止的列表乘積最大最小值,後一處乘積的...
152 乘積最大子串行
給定乙個整數陣列 nums 找出乙個序列中乘積最大的連續子串行 該序列至少包含乙個數 示例 1 輸入 2,3,2,4 輸出 6 解釋 子陣列 2,3 有最大乘積 6。示例 2 輸入 2,0,1 輸出 0 解釋 結果不能為 2,因為 2,1 不是子陣列。如果要求不連續,把所有大於 0 的數字拿出來乘積...
152 乘積最大子串行
因為有負數和0的存在,使問題變得複雜了不少。用dp來做,而且要用兩個dp陣列,其中 1 f i 表示子陣列 0,i 範圍內並且一定包含nums i 數字的最大子陣列乘積,2 g i 表示子陣列 0,i 範圍內並且一定包含nums i 數字的最小子陣列乘積,3 初始化時f 0 和g 0 都初始化為nu...