有一个整数类型的nums,找出一个序列中乘积最大的连续子序列(该序列至少包含一个数) 案例: data = 1, 2, -2, -1, 5, -4 输出20,子序列: -1, 5, 4 ''' nums
给定一个整数数组 nums ,找出一个序列中乘积最大的连续子序列(该序列至少包含一个数)。 示例 1: 输入: [2,3,-2,4] 输出: 6 解释: 子数组 [2,3] 有最大乘积 6。
找出一个序列中乘积最大的连续子序列(至少包含一个数)。 样例 比如, 序列 [2,3,-2,4] 中乘积最大的子序列为 [2,3] ,其乘积为6。
题目描述 给定一个整数数组 nums ,找出一个序列中乘积最大的连续子序列(该序列至少包含一个数)。...示例 1: 输入: [2,3,-2,4] 输出: 6 解释: 子数组 [2,3] 有最大乘积 6。...解法 在序列中计算出以任一个节点为终结点的子序列乘积,取最大值返回即可。 首先不妨尝试以 ? 表示第 ? 个元素为子序列终结点的最大乘积: 若 ? ,则有推导式 ? 若 ?...个元素为子序列终结点的最小乘积,则有 ? 因为涉及到 ? 函数,同理可得: 若 ? ,则有推导式 ? 若 ? ,则有推导式 ? 因为 ? 只与 ? 存在递推关系,不妨以 ?...表示每个位置上的最大、最小序列乘积。
原题 给定一个整数数组 nums ,找出一个序列中乘积最大的连续子序列(该序列至少包含一个数)。 示例 1: 输入: [2,3,-2,4] 输出: 6 解释: 子数组 [2,3] 有最大乘积 6。...} return max; } public void dfs(int[] nums, int index, int total) { // 当前乘积是否最大...if (index >= nums.length) { return; } // 当前数字是否是0,是0的话就没有必要继续下去,因为乘积永远为...原本想着是逐个求出当前下标下的最大值,但因为是乘积,考虑到负负得正的情况,只记录最大值可能还不够,需要最大值和最小值一起记录。
题目信息 给定一个整数数组 nums ,找出一个序列中乘积最大的连续子序列(该序列至少包含一个数)。...示例 1: 输入: [2,3,-2,4] 输出: 6 解释: 子数组 [2,3] 有最大乘积 6。...解题 包含每个数的序列的最大乘积记为dpmax[i],最小乘积dpmin[i] 则nums[i] > 0 时, d
题目链接 https://leetcode-cn.com/problems/maximum-product-subarray/ 题目描述 给定一个整数数组 nums ,找出一个序列中乘积最大的连续子序列...(该序列至少包含一个数)。...示例 1: 输入: [2,3,-2,4] 输出: 6 解释: 子数组 [2,3] 有最大乘积 6。
解答 首先假设存在某个最大乘积,然后对数组遍历,在经过每个元素的时候,有以下四种情况: 如果该元素为正数: 如果到上一个元素为止的最大乘积也是正数,那么直接乘上就好了,同样的最大乘积也会变得更大 如果到上一个元素为止的最大乘积是负数...,那么最大乘积就会变成该元素本身,且连续性被断掉 如果该元素为负数: 如果到上一个元素为止的最大乘积也是负数,那么直接乘上就好了,同样的最大乘积也会变得更大 如果到上一个元素为止的最大乘积是正数,那么最大乘积就会不变...,且连续性被断掉 以上四种情况中说到的最大乘积都是临时最大乘积,每遍历新的元素都需要进行比较来确定真正的最大乘积。...如果要得到乘以当前元素以后的最大乘积,需要记录最大乘积,也要记录最小乘积,因为最小值可能翻身变最大值。...nums[i], nums[i]); res = max(res, max_val); } return res; } }; 另外,该题最长子序列的问题颇为相似
给定一个整数数组 nums ,找出一个序列中乘积最大的连续子序列(该序列至少包含一个数)。 示例 1: 输入: [2,3,-2,4] 输出: 6 解释: 子数组 [2,3] 有最大乘积 6。...需要有一个值去存储最大值res,然后进行遍历,将每个子序列的最大值和res比较,注意这里有负数,所以需要存储最大和最小值两个状态 class Solution { public int maxProduct
这是木又陪伴你的第26天 今天分享leetcode第16篇文章,也是leetcode第152题—乘积最大子序列(Maximum Product Subarray),地址是:https://leetcode.com...【中文题目】 给定一个整数数组 nums ,找出一个序列中乘积最大的连续子序列(该序列至少包含一个数)。...【思路】 如果你明白昨天的分享「最大子数组和」:使用变量存储到当前元素为止的子序列的最大和,递推公式为:dp = max(dp+num, num) 那么同理可以使用变量存储到当前元素为止的子序列的最大乘积...是的,当num>=0,上诉递推公式是没问题的 但是当num序列最小乘积*num 和num中选择最大值 总结来说,tmp_max表示到前一个元素为止的子序列最大乘积;...tmp_min表示到前一个元素为止的子序列最小乘积,那么tmp_max = max(tmp_max*num, tmp_min*num, num),tmp_min = min(tmp_max*num, tmp_min
题目: 给你一个整数数组 nums ,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。...输入: [2,3,-2,4] 输出: 6 解释: 子数组 [2,3] 有最大乘积 6。
难度中等963 给你一个整数数组 nums ,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。...示例 1: 输入: [2,3,-2,4] 输出: 6 解释: 子数组 [2,3] 有最大乘积 6。
题目描述 解题思路 代码 复杂度分析 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,
# LeetCode-152-乘积最大子数组 给你一个整数数组 nums ,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。...示例1: 输入: [2,3,-2,4] 输出: 6 解释: 子数组 [2,3] 有最大乘积 6。...int max = Integer.MIN_VALUE; // 由于存在负数,所以需要维护两个数组 // dp_max[i] 指的是以第 i 个数结尾的 乘积最大...的连续子序列 // dp_min[i] 指的是以第 i 个数结尾的 乘积最小 的连续子序列 dp_max[0] = 1; dp_min[0] = 1;
思路 数组中有负有正有0 状态表示 f[i] : 表示从[0, i]数组乘积的最大值 g[i] : 表示从[0, i]数组乘积的最小值 状态计算 通过i-1的状态递推i 对于f[i] f[i]
⭐️⭐️⭐️⭐️ 1 题目描述 给定一个整数数组 nums ,找到一个具有最大乘积的连续子数组(子数组最少包含一个元素),返回其最大乘积。如输入[-2,1,-3]返回1。...2 题解 思路:动态规划 本题主要思想与LeetCode刷题DAY 19:最大子序和比较类似,只是在状态转移时要考虑数学计算方面的特殊性。...如果当前元素是正数,则与一个大数相乘更容易得到一个更大的乘积,如果当前元素是负数,则与一个小数相乘更容易得到一个更大的乘积,所以状态转移时不仅要记录当前元素结尾的最大乘积,还要记录当前元素结尾的最小乘积...第一步,找到中间状态:此处中间状态max_st[i]表示第i个元素结尾的子数组最大乘积,min_st[i]表示第i个元素结尾的子数组最小乘积。...第二步,确定状态转移:当nums[i]为正数,则直接与前一步最大乘积和最小乘积相乘,并与自身比较,实现最大值、最小值的状态转移,否则与前一步最大值相乘并与自身比较得到当前最小值乘积,与前一步最小值相乘并与自身比较得到当前最大值
int maxRightSum = maxSumRec(a, center + 1, end);//2.右半最大子序列和 /* 3.如果最大子序列和贯穿左右时:...|--- 1.子序列是连续的 |--- 2.中点和中点的后面元素在最大子序列中 */ //寻找左半中含左半一个元素的最大子序列和 int maxLeftSBorderSum...= 0, leftBorderSum = 0; for (int i = center; i >= start; i--) {//遍历包含center点的最侧子序列取最大和 leftBorderSum...: -2 11 -4 的最大子序列和 |---Q1.2: 13 -5 -2 的最大子序列和 |---Q1.3: 序列和最大值贯穿左右时的最大值: |--- 判断左半:序列含左半最后一个元素的子序列最大值...|---Q1.1.2: -4 的最大子序列和 -4 |---Q1.1.3: 序列和最大值贯穿左右时的最大值: |--- 判断左半:序列含左半最后一个元素的子序列最大值 11
乘积最大子数组 - 力扣(LeetCode) 一、题目详情 给你一个整数数组 nums ,请你找出数组中乘积最大的非空连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。...子数组 是数组的连续子序列。 示例 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位置为结尾时的最小乘积。
乘积最大子数组 题目链接: 152....乘积最大子数组 - 力扣(LeetCode) https://leetcode.cn/problems/maximum-product-subarray/description/ 2....算法原理 状态表示:以某一个位置为结尾或者以某一个位置为起点 f[i]表示:以i位置为结尾的所有子树中的最大乘积 [i]表示:以i位置为结尾的所有子树中的最小乘积 2.
题目描述 给你一个整数数组 nums ,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。...示例 1: 输入: [2,3,-2,4] 输出: 6 解释: 子数组 [2,3] 有最大乘积 6。
领取专属 10元无门槛券
手把手带您无忧上云