leetcode 152. Maximum Product Subarry
生活随笔
收集整理的這篇文章主要介紹了
leetcode 152. Maximum Product Subarry
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
這道題求的是乘積的最大值的,那么依照之前的和的最大值類似的做法的,乘積的最大值可能是在最大值*當(dāng)前值和最小值*當(dāng)前值和當(dāng)前值三者之間取得的最大值的,那么使用兩個(gè)變量來保存每一步的最大最小值的。
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;} };從上面看出還可以更簡短代碼一些的,當(dāng)小于0的時(shí)候就可以直接進(jìn)行交換最大和最小值的,也不需要利用中間變量來重新替換的。
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;} };?
轉(zhuǎn)載于:https://www.cnblogs.com/newnoobbird/p/9629053.html
與50位技術(shù)專家面對(duì)面20年技術(shù)見證,附贈(zèng)技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的leetcode 152. Maximum Product Subarry的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MVC技术的面试问题
- 下一篇: BZOJ2958 序列染色(动态规划)