LeetCode Maximum Product Subarray
Posted gavinfish
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode Maximum Product Subarray相关的知识,希望对你有一定的参考价值。
LeetCode解题之Maximum Product Subarray
原题
在一个数组中找出一个子数组,使得子数组中的数的乘积最大。
注意点:
- 数字可能为负数
- 给定的数组不为空
例子:
输入: nums = [2,3,-2,4]
输出: 6
解题思路
比较典型的动态规划题目,需要注意负数乘以负数为正数,所以要同时记录最大局部最优解和最小局部最优解。递推关系式为:
temp = positive
positive = max(num, positive * num, negative * num)
negative = min(num, temp * num, negative * num)
变量命名有点问题,positive指局部最大乘积(不一定是正数),negative指局部最小乘积(也不一定是负数)。
AC源码
class Solution(object):
def maxProduct(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
positive, negative = nums[0], nums[0]
result = nums[0]
for num in nums[1:]:
positive, negative = max(num, positive * num, negative * num), min(num,
positive * num, negative * num)
result = max(result, positive)
return result
if __name__ == "__main__":
assert Solution().maxProduct([2, 3, -2, 4]) == 6
欢迎查看我的Github (https://github.com/gavinfish/LeetCode-Python) 来获得相关源码。
以上是关于LeetCode Maximum Product Subarray的主要内容,如果未能解决你的问题,请参考以下文章
leetcode 152. Maximum Product Subarray
C#解leetcode 152. Maximum Product Subarray
Maximum Product Subarray Leetcode
[动态规划] leetcode 152 Maximum Product Subarray