leetcode 152. Maximum Product Subarry
Posted newnoobbird
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode 152. Maximum Product Subarry相关的知识,希望对你有一定的参考价值。
这道题求的是乘积的最大值的,那么依照之前的和的最大值类似的做法的,乘积的最大值可能是在最大值*当前值和最小值*当前值和当前值三者之间取得的最大值的,那么使用两个变量来保存每一步的最大最小值的。
class Solution { public: int maxProduct(vector<int>& nums) { if(nums.size()<=0) return 0; int maxn,minn,res; maxn=minn=res=nums[0]; for(int i=1;i<nums.size();i++){ if(nums[i]>0){ maxn=max(maxn*nums[i],nums[i]); minn=min(minn*nums[i],nums[i]); }else{ int t=maxn; // 注意这里改变了最大值的 maxn=max(minn*nums[i],nums[i]); minn=min(t*nums[i],nums[i]); } res=max(maxn,res); } return res; } };
从上面看出还可以更简短代码一些的,当小于0的时候就可以直接进行交换最大和最小值的,也不需要利用中间变量来重新替换的。
class Solution { public: int maxProduct(vector<int>& nums) { if(nums.size()<=0) return 0; int maxn,minn,res; maxn=minn=res=nums[0]; for(int i=1;i<nums.size();i++){ if(nums[i]<0) swap(maxn,minn); maxn=max(maxn*nums[i],nums[i]); minn=min(minn*nums[i],nums[i]); res=max(maxn,res); } return res; } };
以上是关于leetcode 152. Maximum Product Subarry的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode152. Maximum Product Subarray
[leetcode-152-Maximum Product Subarray]
leetcode152. Maximum Product Subarray
LeetCode-152-Maximum Product Subarray