题目:给定一个数组,求出这个数组中连续子数组的最大乘积,例如{2,3,-4,5},最大乘积为2*3=6。 解析:动态规划思想,保存两个临时变量maxProduct和minProduct,这两个临时变量分别存储,以当前位置结尾的连续子数组的最大乘积和最小乘积。int maxProduct(vector<int>& nums) { int maxRes = nums[0]; int maxProduct = nums[0]; int minProduct = nums[0]; for(int i = 1; i < nums.size(); ++i) { if(nums[i] >= 0) { maxProduct = max(maxProduct * nums[i],nums[i]); minProduct = min(minProduct * nums[i],nums[i]); } else { int tmp = maxProduct; maxProduct = max(minProduct *nums[i],nums[i]); minProduct = min(tmp * nums[i],nums[i]); } if(maxProduct > maxRes) maxRes = maxProduct; } return maxRes; }
连续子数组的最大乘积
最新推荐文章于 2024-06-04 12:06:07 发布