zoukankan      html  css  js  c++  java
  • Leetcode 152. Maximum Product Subarray

    152. Maximum Product Subarray

    • Total Accepted: 65740
    • Total Submissions: 286731
    • Difficulty: Medium

    Find the contiguous subarray within an array (containing at least one number) which has the largest product.

    For example, given the array [2,3,-2,4],
    the contiguous subarray [2,3] has the largest product = 6.

    思路:DP。注意到乘积变化的连续性,设nums[i]所在子序列的最大值为Smax[i],nums[i]所在子序列的最小值为Smin[i]。

    那么有

    1. Smax[i]=max(Smax[i]*nums[i-1],Smin[i]*nums[i-1],nums[i]);

    2. Smin[i]=min(Smax[i]*nums[i-1],Smin[i]*nums[i-1],nums[i])。

    所以,result=max(Smax[0]...Smax[n-1])。

    代码:

     1 class Solution {
     2 public:
     3     int maxProduct(vector<int>& nums) {
     4         int result=nums[0],maxproduct=nums[0],minproduct=nums[0],i,n=nums.size();
     5         for(i=1;i<n;i++){
     6             int temp=maxproduct;
     7             maxproduct=max(max(maxproduct*nums[i],minproduct*nums[i]),nums[i]);
     8             minproduct=min(min(temp*nums[i],minproduct*nums[i]),nums[i]);
     9             result=max(maxproduct,result);
    10         }
    11         return result;
    12     }
    13 };
  • 相关阅读:
    BSGS模板(互质与不互质) 洛谷P4195、P3846
    整除分块(数论分块)
    洛谷P3327 [SDOI2015]约数个数和——莫比乌斯反演
    模块二
    模块
    二分法 匿名函数
    3.26作业
    函数的递归调用
    yield表达式 三元表达式
    3.25作业
  • 原文地址:https://www.cnblogs.com/Deribs4/p/5707034.html
Copyright © 2011-2022 走看看