原题(Medium):

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

  

思路:

  遍历数组时且逐元素相乘时,如果遇到了0,在求乘积最大值的情况下,0左边的元素与0右边的元素将不会产生任何联系,因为结果归零了。所以可以把数组看作是被0拆分的各个子数组,然后求其各个子数组的总乘积再比较。而在各个子数组内,会出现负值元素,在求子数组的最大值时分为两种情况:

  1. 如果子数组内的负值元素个数为偶数个,则整个子数组各个值直接相乘得到最大值
  2. 如果子数组内的负值元素个数为奇数个,则从左边开始遍历相乘直到最后一个奇数前为止,得到一个最大值;再从右边开始遍历相乘到第一个奇数前为止,又得到一个最大值,两值再比较取最大值。
 int maxProduct(vector<int>& nums) {
//获取各个子数组的总乘积
int product = ;
//获取各个子数组总乘积中的最大的那个
int max = nums[]; //无论数组的负值元素是奇数还是偶数,都进行一次左遍历和右遍历,结果是一致的 //右遍历
for (int num : nums)
{
product *= num;
if (max<product)max = product;
//如果遇到0,说明数组要被拆分,0左边子数组遍历结束,开始0右边子数组的遍历,product归一,重新开始累乘
if (num == )product = ;
} //左遍历
product = ;
for (int i = nums.size() - ; i >= ; i--)
{
product *= nums[i];
if (max<product)max = product;
//如果遇到0,说明数组要被拆分,0右边子数组遍历结束,开始0左边子数组的遍历,product归一,重新开始累乘
if (nums[i] == )product = ;
}
return max;
}

LeetCode | 152. 乘积最大子序列的更多相关文章

  1. Java实现 LeetCode 152 乘积最大子序列

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

  2. [LeetCode]152. 乘积最大子序列(DP)

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

  3. leetcode 152. 乘积最大子序列 java

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

  4. LeetCode 152. 乘积最大子序列(Maximum Product Subarray)

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

  5. Leetcode 152.乘机最大子序列

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

  6. Leetcode题目152.乘积最大子序列(动态规划-中等)

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

  7. 1. 线性DP 152. 乘积最大子数组

    152. 乘积最大子数组  https://leetcode-cn.com/problems/maximum-product-subarray/ func maxProduct(nums []int) ...

  8. [算法]LeetCode 152:乘积最大子序列

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

  9. 152 Maximum Product Subarray 乘积最大子序列

    找出一个序列中乘积最大的连续子序列(该序列至少包含一个数).例如, 给定序列 [2,3,-2,4],其中乘积最大的子序列为 [2,3] 其乘积为 6.详见:https://leetcode.com/p ...

随机推荐

  1. 【BZOJ4237】 稻草人 CDQ分治+单调栈

    ## 题目描述 JOI村有一片荒地,上面竖着N个稻草人,村民们每年多次在稻草人们的周围举行祭典. 有一次,JOI村的村长听到了稻草人们的启示,计划在荒地中开垦一片田地.和启示中的一样,田地需要满足以下 ...

  2. (浙江金华)Day 1 组合数计数

    目录 Day 1 组合计数 1.组合数 (1).C(n,m) 读作n选m,二项式系数 : (2).n个东西里选m个的方案数 不关心选的顺序: (3).二项式系数--->多项式系数: 2.组合数计 ...

  3. 转载:四两拨千斤:借助Spark GraphX将QQ千亿关系链计算提速20倍

    四两拨千斤:借助Spark GraphX将QQ千亿关系链计算提速20倍 时间 2016-07-22 16:57:00 炼数成金 相似文章 (5) 原文  http://www.dataguru.cn/ ...

  4. Linux下WebLogic的启动、停止和后台运行的方法

    Linux下WebLogic的启动.停止和后台运行的方法 进入目录:/home/weblogic/user_projects/domains/base_domain/bin 查看目录下的命令,如图: ...

  5. 如何利用IIS调试ASP.NET网站程序详解

    如何利用IIS调试ASP.NET网站程序详解 更新时间:2019年01月13日 08:44:13   作者:江湖逍遥    我要评论   这篇文章主要给大家介绍了关于如何利用IIS调试ASP.NET网 ...

  6. IntelliJ IDEA Check out from git

    点击check out from vesion control 填写git地址,test,clone

  7. 使用yarn代替npm作为node.js的模块管理器

    使用yarn代替npm作为node.js的模块管理器 转 https://www.jianshu.com/p/bfe96f89da0e     Fast, reliable, and secure d ...

  8. kafka集群部署以及单机部署

      kafka单机部署 一.环境准备 当前环境:centos7.3一台软件版本:kafka_2.12部署目录:/usr/local/kafka启动端口:9092配置文件:/usr/local/kafk ...

  9. C++实现委托机制(三)——lambda表达式封装

    C++.引言:              其实原本没打算写这一章的,不过最后想了想,嗯还是把lambda表达式也一并封装进去,让这个委托也适应lambda表达式的注册.不过在之前还是需要先了解lamb ...

  10. Learning Face Age Progression: A Pyramid Architecture of GANs-1-实现人脸老化

    Learning Face Age Progression: A Pyramid Architecture of GANs Abstract 人脸年龄发展有着两个重要的需求,即老化准确性和身份持久性, ...