LeetCode OJ:Maximum Product Subarray(子数组最大乘积)
2015-10-17 12:13
405 查看
Find the contiguous subarray within an array (containing at least one number) which has the largest product.
For example, given the array
the contiguous subarray
很显然是一个动态规划的问题,找到递归表达式就可以了,考虑到会有负负相乘的问题,所以应该维持一个最大的值以及一个最小的值,递归表达式如下所示:
代码如下所示:
java版本的如下所示,注意使用两个中间变量的原因是防止maxVal先直接更新了之后又被minVal所误用:
For example, given the array
[2,3,-2,4],
the contiguous subarray
[2,3]has the largest product =
6.
很显然是一个动态规划的问题,找到递归表达式就可以了,考虑到会有负负相乘的问题,所以应该维持一个最大的值以及一个最小的值,递归表达式如下所示:
maxLocal[i + 1] = max(max(maxLocal[i] * nums[i + 1], minLocal[i] * nums[i + 1]), nums[i + 1]); minLocal[i + 1] = min(min(maxLocal[i] * nums[i + 1], minLocal[i] * nums[i + 1]), nums[i + 1]); maxGlobal[i + 1] = max(maxGlobal[i], maxLocal[i + 1]);
代码如下所示:
class Solution { public: int maxProduct(vector<int>& nums) { int sz = nums.size(); if (sz == 0)return 0; if (sz == 1)return nums[0]; int maxP, minP, a, b, ret; ret = maxP = minP = a = b = nums[0]; for (int i = 1; i < sz; ++i){ a = max(maxP * nums[i], minP * nums[i]); b = min(maxP * nums[i], minP * nums[i]); maxP = max(a, nums[i]); minP = min(b, nums[i]); ret = max(maxP, ret); } return ret; } };
java版本的如下所示,注意使用两个中间变量的原因是防止maxVal先直接更新了之后又被minVal所误用:
public class Solution { public int maxProduct(int[] nums) { int maxVal, minVal, ret, tmpMax, tmpMin; maxVal = minVal = ret = tmpMax = tmpMin = nums[0]; for(int i = 1; i < nums.length; ++i){ tmpMax = Math.max(maxVal * nums[i], minVal * nums[i]); tmpMin = Math.min(maxVal * nums[i], minVal * nums[i]); maxVal = Math.max(tmpMax, nums[i]); minVal = Math.min(tmpMin, nums[i]); ret = Math.max(maxVal, ret); } return ret; } }
相关文章推荐
- 微软开始推送Win10预览版10565慢速通道更新
- 博客、笔记里用“标签”有啥用?
- 邮箱的正则表达式
- Gson反序列化详解
- Thread.UnCaughtExceptionHandler接口,为每一个Thread对象创建一个异常处理器
- CSS控制字体
- 1691: [Usaco2007 Dec]挑剔的美食家
- 二维矩阵的初始化
- linux安装redis服务以及php redis扩展
- 【Foundation-18-1】NSDate - 创建
- IScroll 无法上下滚动问题
- 好网址
- POJ 2385 Apple Catching(01背包)
- 程序员如何打扫卫生并向老婆汇报
- 安装brew
- POJ-2109
- Java面试题目
- apache2: bad user name ${APACHE_RUN_USER} 解决方法
- spring如何解析通配符路径
- CSS 颜色单位