152. Maximum Product Subarray

Given an integer array nums, find a subarray that has the largest product, and return the product.

The test cases are generated so that the answer will fit in a 32-bit integer.

 

Example 1:

Input: nums = [2,3,-2,4]
Output: 6
Explanation: [2,3] has the largest product 6.

Example 2:

Input: nums = [-2,0,-1]
Output: 0
Explanation: The result cannot be 2, because [-2,-1] is not a subarray.

 

Find the contiguous subarray within an array (containing at least one number) which has the largest product.

 

//要考虑特殊情况,即负数和负数相乘,如2,-3,-7,所以在处理乘法时,除了维护一个局部最大值,还要维护一个局部最小值。

 

public int maxProduct(int[] nums) {
if (nums.length == 0)
return 0;
if (nums.length == 1)
return nums[0];
int max = Integer.MIN_VALUE;
int maxPre = nums[0];
int minPre = nums[0];
int maxHere, minHere;
for (int i = 1; i < nums.length; i++) {
maxHere = Math.max(Math.max(maxPre * nums[i], minPre * nums[i]), nums[i]);
minHere = Math.min(Math.min(maxPre * nums[i], minPre * nums[i]), nums[i]);
max = Math.max(maxHere, max);
maxPre = maxHere;
minPre = minHere;
}
return max;
}
 
posted @   MarkLeeBYR  阅读(13)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示