给定一个整数数组
nums
,找出一个序列中乘积最大的连续子序列(该序列至少包含一个数)。示例 1:
输入: [2,3,-2,4] 输出:6解释: 子数组 [2,3] 有最大乘积 6。示例 2:
输入: [-2,0,-1] 输出: 0 解释: 结果不能为 2, 因为 [-2,-1] 不是子数组。状态转移方程:
maxm = max(maxm*nums[i],minm*nums[i],nums[i]);
minm = min(maxm*nums[i],minm*nums[i],nums[i]);
dp=max(dp,maxm);
class Solution { public: int maxProduct(vector<int>& nums) { int dp; int len=nums.size(); if(len==1) return nums[0]; int maxm,minm; dp=maxm=minm=nums[0]; for(int i=1;i<len;i++) { if(nums[i]>=0) { maxm=max(maxm*nums[i],nums[i]); minm=min(minm*nums[i],nums[i]); } else //如果nums[i]<0,相乘的时候maxm和minm需要相反乘 { int tmp; tmp=maxm; maxm=max(minm*nums[i],nums[i]); minm=min(tmp*nums[i],nums[i]); } dp=max(dp,maxm); } return dp; } };
Leetcode 152. 乘积最大子序列 DP
猜你喜欢
转载自blog.csdn.net/Evildoer_llc/article/details/88412676
今日推荐
周排行