首页 > 试题广场 >

子数组最大乘积

[编程题]子数组最大乘积
  • 热度指数:24199 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 64M,其他语言128M
  • 算法知识视频讲解
给定一个double类型的数组arr,其中的元素可正可负可0,返回连续子数组累乘的最大乘积。

数据范围:数组大小满足 ,数组中元素满足
进阶:空间复杂度 ,时间复杂度
示例1

输入

[-2.5,4,0,3,0.5,8,-1]

输出

12.00000

说明

取连续子数组[3,0.5,8]可得累乘的最大乘积为12.00000 
示例2

输入

[1.0,0.0,0.0]

输出

1.00000

说明

取连续子数组[1.0]可得累乘的最大乘积为1.00000 
头像 不会做题的小菜鸡
发表于 2021-07-16 00:27:46
精华题解 思路 此题是一类动态规划问题,具有重叠子问题和最优子结构的特点,通过找到状态转移方程式来解决问题 方法一:动态规划 我们可以定义一个动态规划数组dp[i],其表示的是从索引0到索引i位置为止,这一段区间存在的子数组的最大乘积保存在dp[i]中,因此对于一个n长的数组,最终返回结果为max(dp[0 展开全文
头像 ButterFlyEffect
发表于 2020-10-27 13:41:13
又是一个求连续区间数组的问题,典型的动态规划问题。和求最大区间和不同的是,如果我们依然尝试用dp[i]表示以a[i]结尾的子区间的最大成绩。会发现由于负数的存在,会导致乘法结果反转。dp[i-1]a[i]反倒变成了最小值,无法得到状态转移方程。沿着乘法的特性看,如果a[i]为负数,那么dpa[i]时 展开全文
头像 Edwin_Xu
发表于 2020-08-28 00:41:53
子数组最大乘积 描述: 给定一个double类型的数组arr,其中的元素可正可负可0,返回连续子数组累乘的最大乘积。 解法1:暴力求解 求子数组的最大乘积,最简单的方式是直接暴力遍历每一个子数组,求得最大的积即可。 Java实现如下: public double maxProduct01(d 展开全文
头像 324134134143428
发表于 2020-09-26 17:47:32
一看本题目知识点是动态规划dp[i] = dp[i-1]的一系列操作但是发现未果,因为是连续的子树组,所以最小值也可能摇身一变把歌唱,成为最大值.所以三十年河东....所以可以定义一个imax imin,来分别遍历最大值和最小值. dp公式: imax = max(arr[i]*imax,a 展开全文
头像 Maokt
发表于 2021-07-28 22:33:18
算法思想一:暴力法 解题思路: 对于求解子数组的最大乘积,只需要按照子数组的大小,进行遍历,最后记录最大乘积,输出结果即可 1、只包含一个元素,直接返回该元素;2、包含两个或两个以上元素,暴力循环求乘积最大的连续子数组,返回乘积。 代码展示: Python版本 class Solution: 展开全文
头像 摸鱼学大师
发表于 2021-07-16 14:00:59
思路: 由题目中给到的信息: 数组是double型,可正可负可零,也即是说乘积可能突然变小(正x负)也可能突然变大(负x负) 返回的子数组必须是连续的一段 这是一道典型的动态规划的题,解题最重要的便是找到状态方程。 方法一:动态规划 如果设置max[i]表示当前i及之前的乘积最大值,min[i] 展开全文
头像 馒头2020
发表于 2021-03-29 15:21:24
题目描述 描述转载自力扣《152. 乘积最大子数组》给你一个整数数组 nums ,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。 示例1 输入: [2,3,-2,4]输出: 6解释: 子数组 [2,3] 有最大乘积 6。 示例2 输入: [-2, 展开全文
头像 认认真真coding
发表于 2021-07-19 17:16:20
题目描述给定一个double类型的数组arr,其中的元素可正可负可0,返回子数组累乘的最大乘积。 方法一:暴力求解 求解思路对于求解子数组的最大乘积,只需要按照子数组的大小,进行遍历,最后记录最大乘积,输出结果即可。 解题代码 class Solution { public: doubl 展开全文
头像 小陆要懂云
发表于 2021-07-17 16:45:55
if(arr.empty()) return 0; vector<double> maxv(arr.size()),minv(arr.size()); maxv[0]=minv[0]=arr[0]; double maxsum = arr[0]; for( 展开全文
头像 神奇.瀚
发表于 2021-02-05 15:24:38
视频连接:https://www.bilibili.com/video/BV1kN411R7Vg/ # # # @param arr double浮点型一维数组 # @return double浮点型 # class Solution: def maxProduct(self , arr 展开全文
头像 菜鸟也要飞的高
发表于 2020-11-06 23:40:48
public double maxProduct(double[] arr) { double count = 1 ; //假设最大值为arr[0] double resultMax = arr[0]; for(int i = 0 ; i < arr.leng 展开全文

问题信息

难度:
57条回答 5804浏览

热门推荐

通过挑战的用户