最大乘积子数组

问题:

Given an integer array nums, find the contiguous subarray within an array (containing at least one number) which has the largest product.

思路:看了这篇文章https://leetcode.com/problems/maximum-product-subarray/discuss/48230/Possibly-simplest-solution-with-O(n)-time-complexity后突然明白是一个动态规划问题。

最大乘积子数组一定以某个元素i结尾,所以不妨定义imax表示以当前元素A[i]结尾的最大乘积子数组,由于负数的存在当前最大值可能来源于上一个元素的最小值。所以定义imin表示以当前元素A[i]结尾的最小乘积子数组,当A[i]小于0时交换imax和imin

代码如下:

class Solution {
public:
    int maxProduct(vector& nums) {
        int ans=nums[0];
        for(int i=1,imin=ans,imax=ans;i

 

你可能感兴趣的:(算法)