您的位置:首页 > 汽车 > 时评 > 152. 乘积最大子数组 python 7行代码

152. 乘积最大子数组 python 7行代码

2024/9/8 12:29:05 来源:https://blog.csdn.net/m0_53291740/article/details/140535931  浏览:    关键词:152. 乘积最大子数组 python 7行代码

152. 乘积最大子数组152. 乘积最大子数组152. 乘积最大子数组

已解答

中等

相关标签

相关企业

给你一个整数数组 nums ,请你找出数组中乘积最大的非空连续

子数组

(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。

测试用例的答案是一个 32-位 整数。

示例 1:

输入: nums = [2,3,-2,4]
输出: 6
解释: 子数组 [2,3] 有最大乘积 6。

示例 2:

输入: nums = [-2,0,-1]
输出: 0
解释: 结果不能为 2, 因为 [-2,-1] 不是子数组。

提示:

  • 1 <= nums.length <= 2 * 104
  • -10 <= nums[i] <= 10
  • nums 的任何前缀或后缀的乘积都 保证 是一个 32-位 整数
class Solution(object):def maxProduct(self, nums):""":type nums: List[int]:rtype: int"""n=len(nums)ans=0nums1=nums[::-1]for i in range(0,n-1):nums[i+1]*=nums[i] or 1nums1[i+1]*=nums1[i] or 1return max(max(nums),max(nums1))

本质是空间换时间+贪心

0. 为什么要翻转一次计算

 这个例子可以很好的看出,因为是从左到右累乘的,与从右到左的累乘的部分子乘积的大小是有差异的。

1. 全为正数的情况

全为正数就是全部相乘。 

负数的情况

最大的子数组相乘一定是连续的。要么是从左到右连续,要么是从右到左连续。这里出现负数之所以还保持是为了防止后面再来一个负数,负数得正就可能出现最大值乘积。有点dp的思想在里面。

2. 出现0的情况

如果出现0时,更新乘积值为1,保证后续的连乘可以继续实现。相当于0的左右断开了 

3. 同时出现奇数个负数时和0

 碰到0就把0当做1,继续和此时的元素相乘

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com