思路
1.题目问什么,我们定义什么状态
学习了 LeetCode 53. 最大子数组和 过后,下意识的我们会定义dp(i) 代表以i为结尾的最大乘积。
但是本题有个重要的问题是:数组中可能有负数!
例如:[−10,5,−10,...] , 此时对于dp(3) 而言 , 它应该是让 −10∗(−10∗5)=500 才是最大的 ,而不是−10∗5=−50
对于一个整数数组 nums,考虑其中所有满足以下条件的片段:片段中至少包含一个元素,且这些元素在数组中的下标是连续的一段。这样的片段称为非空连续子数组。
每个非空连续子数组都对应一个乘积,即该子数组内所有整数的乘积。请找出所有非空连续子数组对应的乘积中的最大值,并返回该最大值。
约束条件
nums 的长度至少为 1,最多不超过 2×104。nums[i] 满足 −10≤nums[i]≤10。32 位有符号整数表示。输入包含一个参数:
nums:一个整数数组,表示待处理的原始数组。返回一个整数,表示所有非空连续子数组乘积中的最大值。
输入
5
输出
5
说明
数组只有一个元素,其值为 5,因此唯一的非空连续子数组为 [5],乘积为 5,最大乘积也是 5。
输入
-1 -2 -3
输出
6
说明
选择子数组 [−2,−3],乘积为 (−2)×(−3)=6。
输入
0 -2 3 -4
输出
24
说明
选择子数组 [−2,3,−4] 乘积为 (−2)×3×(−4)=24
© CodeFun2000 · 使用条款
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册