博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[LeetCode] 152. Maximum Product Subarray Java
阅读量:5247 次
发布时间:2019-06-14

本文共 1504 字,大约阅读时间需要 5 分钟。

题目:

 

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

 

For example, given the array [2,3,-2,4],

the contiguous subarray [2,3] has the largest product = 6.

题意及分析:给出一个数组,求出乘积最大的子数组。这道题可以使用动态规划的方法求解,我使用两个数组posRes和nonPosRes分别用来保存到当前元素的最大的正乘积和最小的负乘积。分析可知,除了只有一个负数的情况下,子数组最大乘积肯定大于等于1。所以对于数组第i-1个元素nums[i-1],我们可以看出到当前这个数的最大乘积可能情况有三种:

(1)posRes[i-1]*nums[i-1]>0,那么当前最大值就是posRes[i-1]*nums[i-1];若小于0,那么最大负值就是posRes[i-1]*nums[i-1]

(2)nonPosRes[i-1]*nums[i-1]>0,那么当前最大值就是nonPosRes[i-1]*nums[i-1];若大于0,那么最大正值就是nonPosRes[i-1]*nums[i-1]

(3)对posRes[i-1]*nums[i-1]==0和nonPosRes[i-1]*nums[i-1]==0单独处理,具体看代码

然后遍历整个数组即可,时间复杂度为o(n),空间复杂度也是o(n)

 

代码:

 

public class Solution {    public int maxProduct(int[] nums) {        int length=nums.length;		if(length==1)			return nums[0];        int[] posRes=new int[length+1];	//记录到当前点的正最大积        int[] nonPosRes=new int[length+1];	//记录到当前点的负最大积        int max=Integer.MIN_VALUE;        posRes[0]=1;        nonPosRes[0]=1;        for(int i=1;i
0){ posRes[i]=a; }else if(a<0) nonPosRes[i]=a; if(b<0) nonPosRes[i]=b; else if(b>0) posRes[i]=b; if(posRes[i]==0&&nums[i-1]>=0){ posRes[i]=nums[i-1]; } if(nonPosRes[i]==0&&nums[i-1]<=0) nonPosRes[i]=nums[i-1]; if(posRes[i]>max) max=posRes[i]; } return max; }}

 

  

 

转载于:https://www.cnblogs.com/271934Liao/p/6923255.html

你可能感兴趣的文章
Jmeter接口压力测试,Java.net.BindException: Address already in use: connect
查看>>
ASP.NET使网页弹出窗口不再困难
查看>>
Leetcode Balanced Binary Tree
查看>>
Leetcode 92. Reverse Linked List II
查看>>
windown快速安装xgboost
查看>>
Linux上安装Libssh2
查看>>
九.python面向对象(双下方法内置方法)
查看>>
go:channel(未完)
查看>>
[JS]递归对象或数组
查看>>
LeetCode(17) - Letter Combinations of a Phone Number
查看>>
Linux查找命令对比(find、locate、whereis、which、type、grep)
查看>>
路由器外接硬盘做nas可行吗?
查看>>
python:从迭代器,到生成器,再到协程的示例代码
查看>>
Java多线程系列——原子类的实现(CAS算法)
查看>>
在Ubuntu下配置Apache多域名服务器
查看>>
多线程《三》进程与线程的区别
查看>>
linux sed命令
查看>>
LeetCode 160. Intersection of Two Linked Lists
查看>>
html标签的嵌套规则
查看>>
[Source] Machine Learning Gathering/Surveys
查看>>