算法设计与应用基础:第十二周(2)

来源:互联网 发布:cf手游尼泊尔战龙 数据 编辑:程序博客网 时间:2024/05/21 15:25

152. Maximum Product Subarray

DescriptionHintsSubmissionsSolutions
  • Total Accepted: 96023
  • Total Submissions: 381825
  • Difficulty: Medium
  • Contributor: LeetCode

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.

Subscribe to see which companies asked this question.

解题思路:通过多次做题不难得出该问题的状态转移方程A[i]=A[i-1]*nums[i](A[i]表示包含nums[i]的最大子乘积序列,但是这道题特殊的地方在于它是乘积,也就是说不一定满足以上状态转移方程,分类讨论应该为A[i]=A[i-1]*nums[i](A[i]为正数时);A[i]=B[i-1]*nums[i](A[i]为负数时,B[i]表示包含nums[i]的最小子乘积序列。这样解题就明了了,代码如下: 

 int maxProduct(vector<int>& nums) {    if(nums.empty())        return 0;    else    {        int now_max=nums[0],now_min=nums[0],biggest=nums[0];        for(int i=1;i<nums.size();i++)        {            int temp1=now_min*nums[i],temp2=now_max*nums[i];            if(nums[i]<0)            {                now_max=max(now_min*nums[i],nums[i]);                now_min=min(temp2,nums[i]);                       }            else            {                now_max=max(now_max*nums[i],nums[i]);                now_min=min(now_min*nums[i],nums[i]);                            }            biggest=max(biggest,now_max);        }        return biggest;    }}
 说明:针对方程特性进行了空间复杂度的优化,使得空间复杂度为O(1);

0 0
原创粉丝点击