首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

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

乘积最大子数组 - 力扣(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位置为结尾时的最小乘积。...的不同状态,即:  故,可以使用虚拟空间,忽略对于 i - 1 边界的考虑,得到:  对于虚拟出来的f表和g表的第一个格子空间,为了不干扰后续的结果,初始化为 f[0]=g[0]=1; 返回值则是f表中最大的那一个

14020

☆打卡算法☆LeetCode 152. 乘积最大子数组 算法解析

一、题目 1、算法题目 “给定一个整数数组,找出数组中乘积最大的非空连续子数组,并返回该子数组所对应的乘积。” 题目链接: 来源:力扣(LeetCode) 链接: 152....乘积最大子数组 - 力扣(LeetCode) 2、题目描述 给你一个整数数组 nums ,请你找出数组中乘积最大的非空连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。...示例 1: 输入: nums = [2,3,-2,4] 输出: 6 解释: 子数组 [2,3] 有最大乘积 6。...这道题的题意是要求遍历数组计算乘积最大的值。...三、总结 这道题就是求数组中子区间的最大乘积。 对于乘法,负负得正,所以对于这道题要维护两个变量,一个最大值一个最小值。 最小值可能为负数,负数乘负数,当前的最大值就变成最小值,最小值就变成最大值了。

39820

乘积最大子数组

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

45820

乘积最大子数组

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

63910

最大回文数乘积

中文题面:给定一个整数 n ,返回可表示为两个 n 位整数乘积最大回文整数 。因为答案可能非常大,所以返回它对 1337 取余 。...我们先看这道题是什么意思:给我们一个n, 让我们找一下所有由两个n位数组成乘积的数里面最大的一个回文数是多少? 这个n位数是什么呢?...比如当三位数n=3的时候就是100~999里面所有两个三位数的乘积里面最大的一个回文数是多少;当两位数n=2的时候就是10~99里面所有两个两位数的乘积里面最大的一个回文数是多少,样例给出了是99 x...91 = 9009,最后返回的这个最大的回文数根据题目的要求模上1337就是答案987。...所以我们再去做的时候要求: 最大数开始枚举 n位数最大数的平方一定要大于等于我们枚举的这个数 然后这里面的边界问题,就是说两个n位数相乘的话它得到的数不一定是2n位也有可能是2n-1位,比如说100✖️

30630

LeetCode-152-乘积最大子数组

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

23420
领券