Leetcode 152. 乘积最大子数组 中等 动态规划
题目:
给你一个整数数组 nums ,请你找出数组中乘积最大的非空连续子数组(该子数组中至少包含一个数字),并返回该子数组所对应的乘积。
测试用例的答案是一个 32-位 整数。
子数组 是数组的连续子序列。
示例:
输入: nums = [2,3,-2,4]
输出: 6
解释: 子数组 [2,3] 有最大乘积 6。
思路:
维护两套动态数组,一套最大值,一套最小值,这样覆盖了负*负的情况。
初始值的话就等于原数组值。
class Solution { public: int maxProduct(vector<int>& nums) { int n=nums.size(); vector<int> dpmax(nums); vector<int> dpmin(nums); for(int i=1;i<n;++i){ dpmax[i]=max(nums[i]*dpmax[i-1], max(nums[i], nums[i]*dpmin[i-1])); dpmin[i]=min(nums[i]*dpmax[i-1], min(nums[i],nums[i]*dpmin[i-1])); } int ret=INT_MIN; for(int i=0;i<n;++i){ ret=max(ret,dpmax[i]); } return ret; } };
联系方式:emhhbmdfbGlhbmcxOTkxQDEyNi5jb20=