原题链接:https://leetcode.com/problems/maximum-product-subarray/description/
题目描述:求一个给定数组的子数组的最大乘积
这是一个非常经典的动态规划题目,同样可以归为“局部最优解和全局最优解法”。与Maxium subarray 思想类似,但是又有所不同。
回想Maxium subarray, 基本思想是遍历数组,同时维护两个变量,一个是全局最优解,即到当前位置元素的最优解;一个是局部最优解,即必须会包含当前元素的最优解。然后将之前的全局最优解与一定包含当前元素的局部最优解比较,看是否需要更改全局最优解。
同样此题目仍然是采用这种思路,但是由于乘法与加法存在的不同,我们还需要维护局部最小值。
1 | public int maxProduct(int[] A){ |
每次局部最优解是一定要包括当前元素的,但是全局最优解可能是当前的局部最优解,或者是之前的全局最优解。
最优解或者包含当前元素,或者不包含当前元素。