首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

乘积最大数组

题目 给你一个整数数组 nums ,请你找出数组乘积最大连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应乘积。...解答 首先假设存在某个最大乘积,然后对数组遍历,在经过每个元素时候,有以下四种情况: 如果该元素为正数: 如果到上一个元素为止最大乘积也是正数,那么直接乘上就好了,同样最大乘积也会变得更大 如果到上一个元素为止最大乘积是负数...,那么最大乘积就会变成该元素本身,且连续性被断掉 如果该元素为负数: 如果到上一个元素为止最大乘积也是负数,那么直接乘上就好了,同样最大乘积也会变得更大 如果到上一个元素为止最大乘积是正数,那么最大乘积就会不变...,且连续性被断掉 以上四种情况中说到最大乘积都是临时最大乘积,每遍历新元素都需要进行比较来确定真正最大乘积。...如果要得到乘以当前元素以后最大乘积,需要记录最大乘积,也要记录最小乘积,因为最小值可能翻身变最大值。

46520

乘积最大数组

题目: 给你一个整数数组 nums ,请你找出数组乘积最大连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应乘积。...输入: [2,3,-2,4] 输出: 6 解释: 子数组 [2,3] 有最大乘积 6。...思路: 遍历数组时计算当前最大值,不断更新 我们需要记录阶段子数组最大值和最小值,当出现负数时候我们阶段最大值×负数会变成阶段最小值,阶段最小值×负数会变阶段最大值,因此我们需要存储阶段最小值,并且在需要负数时候进行提取交换...return nums[0]; } int max=nums[0],itemMax=nums[0],itemMin=nums[0]; //max 存储所有连续子数组最大值...//itemMax,itemMin存储当前子数组最大值和最小值 //其中需要itemMin存最小值主要因为数组里可能有负数,负数最小值再乘以一个整数就是最大

64310
您找到你想要的搜索结果了吗?
是的
没有找到

LeetCode-152-乘积最大数组

# LeetCode-152-乘积最大数组 给你一个整数数组 nums ,请你找出数组乘积最大连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应乘积。...示例1: 输入: [2,3,-2,4] 输出: 6 解释: 子数组 [2,3] 有最大乘积 6。...# 解题思路 方法1、动态规划: 遍历数组时候不断计算当前最大值 同时还需要记录之前最小值,当遍历nums[i]为负数时候 最大值*负数:会导致最大值变为最小 最小值*负数:会导致最小值变为最大...nums[i],nums[i]);计算 最大值和最小值会发生互换,导致结果不对 既然这样当遇到负数nums[i]时候,提前将最大值和最小值互换,就可以维持原本最大最小值 一个更好题解来自https...// dp_max[i] 指的是以第 i 个数结尾 乘积最大 连续子序列 // dp_min[i] 指的是以第 i 个数结尾 乘积最小 连续子序列

23620

乘积最大数组

题目描述 解题思路 代码 复杂度分析 GitHub LeetCode 项目 题目描述 题目链接 给你一个整数数组 nums ,请你找出数组乘积最大连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应乘积...示例 1: 输入:[2,3,-2,4] 输出:6 解释:子数组 [2,3] 有最大乘积 6。...解题思路 本题要求是「乘积最大数组」,但是最大乘积可能是两个正数相乘,也可能是两个负数相乘。定义 pi 为包含 i 数组最大乘积,ni 为包含 i 数组最小乘积。...则记数组 nums0:i 最大乘积值为 m: pi = max(pi - 1 numsi, numsi, ni - 1 numsi) ni = min(pi - 1 numsi, numsi,...Java 编程思想-最全思维导图-GitHub 下载链接,需要小伙伴可以自取~!!!

62510

LeetCode刷题DAY 20:乘积最大数组

⭐️⭐️⭐️⭐️ 1 题目描述 给定一个整数数组 nums ,找到一个具有最大乘积连续子数组(子数组最少包含一个元素),返回其最大乘积。如输入[-2,1,-3]返回1。...求最大和时,转移重点是在当前元素上加一个整数,否则只保留自身,求最大乘积时,因为有负负得正因素,因此要考虑当前元素符号。...如果当前元素是正数,则与一个大数相乘更容易得到一个更大乘积,如果当前元素是负数,则与一个小数相乘更容易得到一个更大乘积,所以状态转移时不仅要记录当前元素结尾最大乘积,还要记录当前元素结尾最小乘积...第一步,找到中间状态:此处中间状态max_st[i]表示第i个元素结尾数组最大乘积,min_st[i]表示第i个元素结尾数组最小乘积。...第二步,确定状态转移:当nums[i]为正数,则直接与前一步最大乘积和最小乘积相乘,并与自身比较,实现最大值、最小值状态转移,否则与前一步最大值相乘并与自身比较得到当前最小值乘积,与前一步最小值相乘并与自身比较得到当前最大

63820

​LeetCode刷题实战152:乘积最大数组

今天和大家聊问题叫做 乘积最大数组,我们先来看题面: https://leetcode-cn.com/problems/maximum-product-subarray/ Given an integer...题意 给你一个整数数组 nums ,请你找出数组乘积最大连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应乘积。...样例 示例 1: 输入: [2,3,-2,4] 输出: 6 解释: 子数组 [2,3] 有最大乘积 6。...示例 2: 输入: [-2,0,-1] 输出: 0 解释: 结果不能为 2, 因为 [-2,-1] 不是子数组。 解题 思路: 求最大值,可以看成求被0拆分各个子数组最大值。...当一个数组中没有0存在,则分为两种情况: 1.负数为偶数个,则整个数组各个值相乘为最大值; 2.负数为奇数个,则从左边开始,乘到最后一个负数停止有一个“最大值”,从右边也有一个“最大值”,比较,得出最大

24820

dp算法 力扣152乘积最大数组

乘积最大数组 - 力扣(LeetCode) 一、题目详情 给你一个整数数组 nums ,请你找出数组乘积最大非空连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应乘积。...测试用例答案是一个 32-位 整数。 子数组数组连续子序列。 示例 1: 输入: nums = [2,3,-2,4] 输出: 6 解释: 子数组 [2,3] 有最大乘积 6。...提示: 1 <= nums.length <= 2 * 104 -10 <= nums[i] <= 10 nums 任何前缀或后缀乘积都 保证 是一个 32-位 整数 二、算法讲解 题目求解乘积...,乘积可以为正,也可以为负,为了区分这两种状态,我们创建两个表: f[i] 表示以i-1位置为结尾时最大乘积; g[i] 表示以i-1位置为结尾时最小乘积。...f表和g表第一个格子空间,为了不干扰后续结果,初始化为 f[0]=g[0]=1; 返回值则是f表中最大那一个。

14120

一文看懂《子数组最大乘积问题》

问题描述:给定一个长度为 N 整数数组,只允许乘法,不能用除法。计算任意 N - 1 个数组合中乘积最大一组,并写出算法时间复杂度。...这道题目和另外一个《连续数组最大乘积》有点像,那道题我们可以通过记录全局最大值和负数最小值来完成。这道题则稍微有点不同,我们来看一下。...我们假设被排除 元素索引为 i(0 <= i < N, 且 i 为整数)。 我们用两个数组 l 和 r 分别记录从前和从后数组乘积。...我们用 l[i]表示原数组中从 0 开始到 i - 1(包括 i - 1)乘积, r[i]表示原数组中从 i(包括 i)到 N - 1(包括 N - 1)乘积。 ?...由于只需要 从有到尾和从尾部到头扫描数组两次即可得到数组l和r,进而可以在线性时间复杂度获取到所有的乘积,然后在这个过程中我们就可以取出最大值,因此这样做时间复杂度为O(N)。

1.4K10

手撕腾讯面试题-乘积最大数组

本文内容为通过一道腾讯面试题,即力扣 152. 乘积最大数组,由暴力法求解一步一步演化到由动态规划进行求解来介绍动态规划。...题目 给你一个整数数组 nums ,请你找出数组乘积最大连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应乘积。...示例 解题思路 注意点 本题要求乘积最大连续子数组而不是乘积最大子序列,因此要求子数组元素在原数组中是连续。...如果连续子数组元素存在负数,正数乘以负数就成负数,那么最大值乘以负数就变成了最小值,因此需要同时考虑当前连续子数组乘积最大值curMax和最小值curMin。...举栗 以整数数组 nums = [2, 3, -2, 4] 为栗子,求乘积最大数组乘积。 如下图示: ?

33930

【LeetCode热题100】【动态规划】乘积最大数组

乘积最大数组 - 力扣(LeetCode) 要找乘积最大连续子数组,我们之前做过找和最大连续子数组【LeetCode热题100】【普通数组最大数组和-CSDN博客 对于和来讲,定义dp[i]是以...nums[i]为结尾最大数组和,那么dp[i]要么就是nums[i]加上之前dp[i-1],即前一个子数组加上当前元素,要么是nums[i]自己新开一个子数组,所以状态转移方程 dp[i] =...std::max(dp[i - 1] + nums[i], nums[i]); 但是乘积与和不一样地方在于负数情况,负数加负数和是越来越小,但是乘积会因为碰到一个负数变成最大或者变成最小,因此需要用两个数组记录状态...,dpMin记录最小,dpMax记录最大 class Solution { public: int maxProduct(vector &nums) { vector<

5410

手撕腾讯面试题-乘积最大数组

题目 给你一个整数数组 nums ,请你找出数组乘积最大连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应乘积。...image.png 解题思路 注意点 本题要求乘积最大连续子数组而不是乘积最大子序列,因此要求子数组元素在原数组中是连续。...只包含一个元素 */ if (size == 1) { return nums[0]; } /* maxRes 记录整数数组 nums 中乘积最大连续子数组乘积...如果连续子数组元素存在负数,正数乘以负数就成负数,那么最大值乘以负数就变成了最小值,因此需要同时考虑当前连续子数组乘积最大值curMax和最小值curMin。...举栗 以整数数组 nums = [2, 3, -2, 4] 为栗子,求乘积最大数组乘积

75530
领券