当前位置: 代码迷 >> 综合 >> leetcode 152.Maximum Product Subarray( 乘积最大子序列)
  详细解决方案

leetcode 152.Maximum Product Subarray( 乘积最大子序列)

热度:27   发布时间:2023-11-17 00:48:18.0

题目要求

给定一个整数数组 nums ,找出一个序列中乘积最大的连续子序列(该序列至少包含一个数)。
在这里插入图片描述

解题思路

和求连续最大子数组的和一样leetcode 53 Maximum Subarray (求最大子数组的和),用Kadanes的思想,(算是一种动态规划算法) 它需要两个变量,一个用来存储局部最优值,一个用来比较全局最优值。唯一不同的是,在乘法运算中,可能会有负数和正数相乘的情况,原本这个正数是目前最大的元素,乘一个负数后,就变成最小的了。所以,我们要同时记录到当前位置的最大值和最小值。如果遇到一个负数,那么我们就交换当前的最大和最小值,保证在进行和负数的乘法时也可以得到我们相应的最大,最小值。代码挺简单的,和一起食用效果会更好哦。

主要代码python

class Solution(object):def maxProduct(self, nums):""":type nums: List[int]:rtype: int"""if not nums:return 0max_, imax, imin = float("-inf"), 1, 1for i in range(len(nums)):# 遇到负数就交换if nums[i]<0:imax, imin = imin, imaximax = max(nums[i]*imax, nums[i])imin = min(nums[i]*imin, nums[i])max_ = max(imax, max_)return max_

相似题目:
leetcode 53 Maximum Subarray (求最大子数组的和)

原题链接 https://leetcode-cn.com/problems/maximum-product-subarray/submissions/

  相关解决方案