【Leetcode刷題篇】leetcode152 乘積最大陣列

mind_programmonkey發表於2020-12-08

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

示例 1:
輸入: [2,3,-2,4]
輸出: 6
解釋: 子陣列 [2,3] 有最大乘積 6。

示例 2:
輸入: [-2,0,-1]
輸出: 0
解釋: 結果不能為 2, 因為 [-2,-1] 不是子陣列。

此題解題思路:與之前的子序列問題不同,這是連續的,所以維護兩個動態陣列共同更新。

class Solution {
    public int maxProduct(int[] nums) {
        if(nums.length==1) {
	    		return nums[0];
	    	}
	    	
	    	// 兩個陣列動態規劃
	    	int[] maxArr = new int[nums.length];
	    	int[] minArr = new int[nums.length];
	    	// 賦值
	    	System.arraycopy(nums, 0, maxArr, 0, nums.length);
	    	System.arraycopy(nums, 0, minArr, 0, nums.length);
	    	// 對其進行判斷
	    	for(int i=1;i<nums.length;i++) {
	    		maxArr[i] = Math.max(nums[i]*maxArr[i-1], Math.max(nums[i], nums[i]*minArr[i-1]));
	    		minArr[i] = Math.min(nums[i]*minArr[i-1], Math.min(nums[i], nums[i]*maxArr[i-1]));
	    	}
	    	// 對陣列進行迴圈找最大值
	    	int max = maxArr[0];
	    	for(int i=1;i<maxArr.length;i++) {
	    		max = Math.max(max, maxArr[i]);
	    	}
	    	return max;
    }
}

相關文章