思路:
    1、动态规划
    2、因为要考虑负数,所以要多维护一条数组。

    1. # 给你一个整数数组 nums ,请你找出数组中乘积最大的连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。
    2. #
    3. #
    4. #
    5. # 示例 1:
    6. #
    7. # 输入: [2,3,-2,4]
    8. # 输出: 6
    9. # 解释: 子数组 [2,3] 有最大乘积 6。
    10. #
    11. #
    12. # 示例 2:
    13. #
    14. # 输入: [-2,0,-1]
    15. # 输出: 0
    16. # 解释: 结果不能为 2, 因为 [-2,-1] 不是子数组。
    17. # Related Topics 数组 动态规划
    18. # 👍 709 👎 0
    19. # leetcode submit region begin(Prohibit modification and deletion)
    20. class Solution(object):
    21. def maxProduct(self, nums):
    22. """
    23. :type nums: List[int]
    24. :rtype: int
    25. """
    26. min_list = [0 for x in nums]
    27. for i, v in enumerate(nums):
    28. if i == 0:
    29. min_list[0] = nums[0]
    30. continue
    31. nums[i] = max(v, v * nums[i - 1], v * min_list[i - 1])
    32. min_list[i] = min(v, v * nums[i - 1], v * min_list[i - 1])
    33. return max(nums)
    34. # leetcode submit region end(Prohibit modification and deletion)
    35. s = Solution()
    36. print(s.maxProduct([-2, 0, -1]))
    37. print(s.maxProduct([2, 3, -2, 4]))