class Solution {
public:
int maxProduct(vector<int>& nums) {
if(nums.empty())
return ;
if(nums.size() == )
return nums[]; int maxAll = nums[]; //global maximum
int maxLast = nums[]; //maximum including last element
int maxCur; //maximum including current element
int minLast = nums[]; //minimum including current element
int minCur; //minimum including last element
for(int i = ; i < nums.size(); i ++)
{
maxCur = max(nums[i], max(maxLast*nums[i], minLast*nums[i]));
minCur = min(nums[i], min(maxLast*nums[i], minLast*nums[i]));
maxLast = maxCur;
minLast = minCur;
maxAll = max(maxAll, maxCur);
}
return maxAll;
}
};

因为nums可能包含负数,因此之前最小的乘积*当前值,有可能成为最大值;而之前最大的乘积*当前值,有可能成为最小值。

因此,每次计算的时候,把目前的最大乘积和最小乘积都保存下来,用于下一次计算。

补充一个python的实现:

 class Solution:
def maxProduct(self, nums: 'List[int]') -> 'int':
n = len(nums)
if n == :
return
elif n == :
return nums[]
maxAll,preMax,preMin = nums[],nums[],nums[]
curMax,curMin = nums[],nums[]
for i in range(,n):
curMax = max(nums[i],max(preMax*nums[i],preMin*nums[i]))
curMin = min(nums[i],min(preMax*nums[i],preMin*nums[i]))
preMax,preMin = curMax,curMin
maxAll = max(maxAll,curMax)
return maxAll

leetcode152的更多相关文章

  1. [Swift]LeetCode152. 乘积最大子序列 | Maximum Product Subarray

    Given an integer array nums, find the contiguous subarray within an array (containing at least one n ...

  2. LeetCode152:Maximum Product Subarray

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

  3. 【leetcode-152】 乘积最大子序列

    给定一个整数数组 nums ,找出一个序列中乘积最大的连续子序列(该序列至少包含一个数). 示例 1: 输入: [2,3,-2,4]输出: 6解释: 子数组 [2,3] 有最大乘积 6.示例 2: 输 ...

  4. Leetcode152. Maximum Product Subarray乘积的最大子序列

    给定一个整数数组 nums ,找出一个序列中乘积最大的连续子序列(该序列至少包含一个数). 示例 1: 输入: [2,3,-2,4] 输出: 6 解释: 子数组 [2,3] 有最大乘积 6. 示例 2 ...

  5. leetcode152. 乘积最大子序列

    给定一个整数数组 nums ,找出一个序列中乘积最大的连续子序列(该序列至少包含一个数).示例 1:输入: [2,3,-2,4]输出: 6解释: 子数组 [2,3] 有最大乘积 6.示例 2:输入: ...

  6. LeetCode 152

    Maximum Product Subarray Find the contiguous subarray within an array (containing at least one numbe ...

随机推荐

  1. 外网如何访问web项目holer实现篇

    外网访问WEB 内网主机上安装了WEB服务器,只能在局域网内访问,怎样从公网也能访问本地WEB应用? 本文将介绍使用holer实现的具体步骤. 1. 准备工作 1.1 安装Java 1.7及以上版本 ...

  2. MySQL数据库内置加密函数总结

    首先,我认识的加密函数有以下几个: password(plainText):旧版(OLD_PASSWORD())加密后长度16位,新版41位select length(password("1 ...

  3. Erlang-接口技术

    系统的构建一定会设计到简历接口,让他与不同的语言的应用程序之间简历系统的联系.这就叫做erlang的接口技术. 接口技术的三种实现方法: 1.让程序以外部操作系统进行的形式在Erlang虚拟机以外运行 ...

  4. Arcgis Server 本地化

    一.将API包放入server文件夹 将3.18的arcgis API 解压放入Arcgis Server的安装目录的……\Server\framework\runtime\tomcat\webapp ...

  5. BAT批处理文件,脚本时间值%time:~0,2%%time:~3,2%%time:~6,2%的用法。

    最近公司的项目,需要部署一个oracle定时备份脚本,删除掉特定时间前的备份文件.BAT批处理文件结合windows系统(任务计划程序) 正常情况下我们的任务计划会有反馈数值,通过它可以判断这个任务计 ...

  6. react-router 父子路由同时要接收 params 的写法

    <Route path="/profile/:companyId/:companyName" component={Profile} onEnter={(nextState, ...

  7. PythonStudy——数字类型 Number type

    # 了了解:py2中小整数用int存放,大整数用long# 1.整型 num = -1000000000000000000000000000000000000000000000000 print(nu ...

  8. PythonStudy——PyCharm 选择性忽略PEP8代码风格警告信息

    用了几天的PyCharm,发现确实在编写Python代码上非常好用,但有一点体验不太好,就是代码编写时要按照PEP8代码风格编写,不然会有波浪线的警告信息.解决方法如下: 方法一:将鼠标移到提示的地方 ...

  9. windows openssh server 安装试用

    使用Windows的可能会知道win10 的已经包好了openssh 服务,但是对于其他机器win 7 windows 2008 ,就需要其他的方法了 还好powershell 团队开发了支持wind ...

  10. IETF和W3C的区别

    国际互联网协会ISOC和万维网联盟W3C是互联网领域内两大国际协会组织,ISOC旗下IETF机构与W3C是互联网行业内两大标准组织.不可否认「IETF和W3C都是优秀的组织,它们从事着一种使事情按程序 ...