給定乙個整數陣列,陣列裡可能有正數、負數和零。陣列中連續的乙個或多個整數組成乙個子陣列,每個子陣列都有乙個和。求所有子陣列的和的最大值。例如,如果輸入的陣列為,那麼和為最大的連續子陣列為,和為18。
使用動態規劃的思想。令currsum是以當前元素結尾的最大連續子陣列的和,maxsum是全域性的最大子陣列的和,當往後掃瞄時,對第i個元素有兩種選擇,要麼放入前面找到的子陣列,要麼作為新子陣列的第乙個元素:如果currsum>0,則令currsum加上array[i];如果currsum<=0,則currsum被置為當前元素,即currsum=array[i]。而對於maxsum,則若maxsum < currsum,則更新maxsum=currsum,否則maxsum保持原值,不更新。
//
// created by huxijie on 17-3-18.
// 最大連續子陣列的和
#include
using
namespace
std;
int maxsubarraysum(int
array,int n)
} else }}
int j;
for (j = from; j < to ; ++j)
}cout
<< array[j] << "="
<< maxsum << endl;
}int main() ;
maxsubarraysum(array, n);
return
0;}
3+10-4+7+2=18
process finished with
exit code 0
程式設計之法 面試和演算法心得(最大連續子陣列和)
輸入乙個整形陣列,陣列裡有正數也有負數。陣列中連續的乙個或多個整數組成乙個子陣列,每個子陣列都有乙個和。求所有子陣列的和的最大值,要求時間複雜度為o n 例如輸入的陣列為1,2,3,10,4,7,2,5,和最大的子陣列為3,10,4,7,2,因此輸出為該子陣列的和18。求乙個陣列的最大子陣列和,我想...
程式設計之法 面試和演算法心得(最大連續乘積子串)
給乙個浮點數序列,取最大乘積連續子串的值,例如 2.5,4,0,3,0.5,8,1,則取出的最大乘積連續子串為3,0.5,8。也就是說,上述陣列中,3 0.5 8這3個數的乘積30.58 12是最大的,而且是連續的。此最大乘積連續子串與最大乘積子串行不同,請勿混淆,前者子串要求連續,後者子串行不要求...
最大連續子陣列和
題目描述 輸入乙個整形陣列,陣列裡有正數也有負數。陣列中連續的乙個或多個整數組成乙個子陣列,每個子陣列都有乙個和。求所有子陣列的和的最大值,要求時間複雜度為o n 例如輸入的陣列為 1,2,3,10,4,7,2,5 和最大的子陣列為 3,10,4,7,2 因此輸出為該子陣列的和18。思路 採用貪婪法...