题目要求
给定一个整数数组 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 (求最大子数组的和)