【剑指offer】面试题31:连续子数组的最大和
題目:
在古老的一維模式識別中,常常需要計(jì)算連續(xù)子向量的最大和,當(dāng)向量全為正數(shù)的時候,問題很好解決。但是,如果向量中包含負(fù)數(shù),是否應(yīng)該包含某個負(fù)數(shù),并期望旁邊的正數(shù)會彌補(bǔ)它呢?例如:{6,-3,-2,7,-15,1,2,2},連續(xù)子向量的最大和為8(從第0個開始,到第3個為止)。
思路:
保存兩個值:當(dāng)前和sum、最大和max。當(dāng)sum小于等于0時,置sum為當(dāng)前值;否則將當(dāng)前值加到sum上。每次sum和max比較,更新max。
另外,動態(tài)規(guī)劃的思路代碼和這里一樣。動態(tài)規(guī)劃就是考慮 f(i) 和 f(i-1) 之間的關(guān)系。
注意:
需要注意的就是,sum和max初始值的設(shè)定,特別是max的初始值。max初始值不能設(shè)置為0,因?yàn)檩斎肟赡苋珵樨?fù)數(shù),應(yīng)該是 int 的最小值 0x80000000。或者將sum和max初始化為下標(biāo)為0的元素的值。
另外,需要判斷輸入數(shù)組的個數(shù)。
代碼:
class Solution { public:int FindGreatestSumOfSubArray(vector<int> array) {if(array.size()<=0) return 0;int max=array[0];int sum=array[0];for(int i=1;i<array.size();++i){if(sum<=0) sum=array[i];else sum+=array[i];max=max>sum?max:sum;}return max;} };?
轉(zhuǎn)載于:https://www.cnblogs.com/buxizhizhou/p/4722354.html
總結(jié)
以上是生活随笔為你收集整理的【剑指offer】面试题31:连续子数组的最大和的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android笔记(八) Android
- 下一篇: lt;%%gt;创建内联代码块(表达)