给定一个整数数组 nums ,找出一个序列中乘积最大的连续子序列(该序列至少包含一个数)。

示例 1:

输入: [2,3,-2,4]
输出: 6
解释: 子数组 [2,3] 有最大乘积 6。

示例 2:

输入: [-2,0,-1]
输出: 0
解释: 结果不能为 2, 因为 [-2,-1] 不是子数组。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/maximum-product-subarray
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解答:

1.一开始的想法是利用一个数组dp,保存最大值,但是数组中有负数,所以无法判断之前的负数可能遇见这个元素就变成最大值了。

2.然后想的是能不能简化暴力法,想到用一个二维dp数组,将nums数组的子序列乘积值保存一下,然后计算后面的值既可以用前面的值了,比如说

1~5,可以是1~4*nums[5],这样不需要重新计算一遍,但是数组空间爆了,倒数第二个案例通过不了。。。。所以这种解法no

3.看解析了,发现别人是在1的基础上再添加一个mindp数组,其实代表一种想法就是,每次遇到的元素就是正数或者负数,然后前面的值可能是正数,负数,所以我们用mindp保存可能遇到的负数最小值,但是max中保存的是最大值,所以只需要拿前一个的最小值,最大值分别乘以nums[i],然后还需要跟nums[i]自己比较谁最大,毕竟,可能这个子序列走到i的时候前面都不理想,那么从i开始不是也是一种子序列的选择吗?

dpmax[i]=max(nums[i],nums[i]*dpmin[i-1],nums[i]*dpmax[i-1]),从三者间取出一个最大值,那么同样的,min就是取出最小值。

 1 class Solution {
2 public int maxProduct(int[] nums) {
3 int n=nums.length;
4 int[] dpMax=new int[n];
5 int[] dpMin=new int[n];
6 dpMax[0]=dpMin[0]=nums[0];
7 for(int i=1;i<n;i++)
8 {
9 dpMax[i]=Math.max(dpMax[i-1]*nums[i],Math.max(nums[i],dpMin[i-1]*nums[i]));
10 dpMin[i]=Math.min(dpMax[i-1]*nums[i],Math.min(nums[i],dpMin[i-1]*nums[i]));
11 }
12 int max=dpMax[0];
13 for(int i=1;i<n;i++)
14 max=Math.max(max,dpMax[i]);
15 return max;
16 }
17 }

最新文章

  1. nginx 命令
  2. 把excel中的数据导入到数据库
  3. Java语法基础动手动脑实践
  4. Mac下配置cocos2dx2.2.6的Android环境
  5. bnu 4353 删格游戏(博弈)
  6. HDU4745 - Two Rabbits(区间DP)
  7. OOA/OOD/OOP(转)
  8. Unity3D文件读取
  9. onload=&quot;fixImage(this, 200, 200)&quot;
  10. [转]Go里面的unsafe包详解
  11. 复习下CSS-零碎要点
  12. windows2012 IIS部署GeoTrust证书踩过的坑。 视频测试可用 IIS 证书导入
  13. ELK之使用heartbeat监控WEB站点
  14. mybatis(一、原理,一对多,多对一查询)
  15. 用Java发起HTTP请求与获取状态码(含状态码列表)
  16. K:栈和队列的比较
  17. 纯css3实现的竖形二级导航
  18. 2017年10月29日 数据库查询总结&amp;45道题
  19. Java内存区域与内存溢出异常---对象的创建
  20. Codeforces 852D

热门文章

  1. 拿了十几个offer,怎样做选择?
  2. MongoDB分片 --- MongoDB基础用法(六)
  3. git每次提交代码都要设置账号密码的问题
  4. Java SPI 机制实现解耦与本地化
  5. Redis常用命令(5)——Set
  6. Java学习的第十七天
  7. twoSum问题的核心思想
  8. Unity报错:xxx AnimationEvent has no function name specified!
  9. 读书笔记:《数据结构与算法分析Java语言描述》
  10. Loading descriptor for XXX.&#39;has encountered a problem&#39; A internal error occured during:&quot;Loading .....&quot;