Maximum Product Subarray
题目描述
Given an integer array nums, find the contiguous subarray within an array (containing at least one number) which has the largest product.
Example 1:
Input: [2,3,-2,4]
Output: 6
Explanation: [2,3] has the largest product 6.
Example 2:
Input: [-2,0,-1]
Output: 0
Explanation: The result cannot be 2, because [-2,-1] is not a subarray.
解题思路
本题要在一个整数数组中找到一个连续的子数组,使这个子数组的元素的乘积最大。
考虑到这样一个问题,如果这个数组中不包含0,那么以第一个元素为起点的子数组,随着子数组长度的增加,元素乘积的绝对值肯定是非严格递增的,因此我们只需要维护整个过程中的最小值和最大值,因为负的最小值,乘以一个负数,有可能变成一个最大值,最后直接返回最大值即可。
但是如果这个数组中包含0,那么可以把0当做一个分隔符,当遇到0时,我们其实已经求出了0之前的子数组的最大乘积,已经可以把它放在一边,继续计算0之后的子数组的最大乘积,并使用一个变量result记录整个过程中的最大乘积。
源代码
1 | class Solution { |