乘积最大子序列(dp)

题目:https://leetcode-cn.com/problems/maximum-product-subarray/

class Solution {
public:
    int maxProduct(vector<int>& nums) {
        /*
        *给定一个整数数组 nums ,找出一个序列中乘积
        *最大的连续子序列,该序列至少包含一个数
        *思路:维护当前i结尾的最大、最小。维护最小是
        *考虑了负数的情况
        */
        int n = nums.size();
        int mx = 1,mn = 1,ans = nums[0];
        for(int i = 0;i < n;i++) {
            if(nums[i] < 0) swap(mx,mn);
            mx = max(nums[i],mx*nums[i]);
            mn = min(nums[i],mn*nums[i]);
            ans = max(ans,mx);
        }
        return ans;
    }
};
发布了152 篇原创文章 · 获赞 2 · 访问量 6455

猜你喜欢

转载自blog.csdn.net/weixin_43918473/article/details/104670778