0
点赞
收藏
分享

微信扫一扫

leetcode152,乘积最大子数组

乌龙茶3297 2022-03-18 阅读 72

152. 乘积最大子数组

给你一个整数数组 nums ,请你找出数组中乘积最大的非空连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。

测试用例的答案是一个 32-位 整数。

子数组 是数组的连续子序列。

解析

  • 采用动态规划的思想,maxp[i] 表示包含num[i]的乘积最大值,minp[i]表示包含num[i]的乘积最小值,由于元素中含有负数因此最大最小都要考虑。
  • 然后由于后一个元素值只和前一个元素值有关,因此可以使用动态数组优化空间。

code

class Solution {
public:
    int maxProduct(vector<int>& nums) {
        int n=nums.size();
        int maxp = nums[0];
        int minp = nums[0];
        int ans = nums[0];
        for(int i=1;i<n;i++){
            int tmp = maxp;
            maxp = max(max(maxp*nums[i],minp*nums[i]),nums[i]);
            minp = min(min(tmp*nums[i],minp*nums[i]),nums[i]);
            ans = max(maxp,ans);
        }
        return ans;
    }
};
举报

相关推荐

0 条评论