一個有N個整數元素的一維數組,那么子數組之和的最大值是什么?
例如:-2 5 3 -6 4 -8 6 maxsum=8
無論是高中學習c語言還是現在的Java,首先想法是就是找出所有的子數組,重復計算,然后求其和,取最大。
int Maxsum1(int *array,int n)
{
int max=-INF;
int sum;
int i,j;
for(i=0;i<n;i++) {="" sum="0;" for(j="i;j<n;j++)" sum+="array[j];" if(sum="">max)
max=sum;
}
}
return max;
}
</n;i++)>
還有一種想法,累加。重復累加,只要大於0,就說明當前的“和”可以繼續增大,如果小於0了,說明“之前的最大和”已經不可能繼續增大了,就從新開始。
int Maxsum3(int *array,int n)
{
int max=-INF;
int sum=0;
for(int i=0;i<n;i++) {="" if(sum<0)="" sum="array[i];" else="" sum+="array[i];" if(sum="">max)
max=sum;
}
return max;
}
</n;i++)>
附網絡上高端的動態規划求解
2個數組的
更短的
真正接受的思路:
從左邊開始,在這個過程中記錄一個當前子數組的最大值,前幾項小於零時則刷新所有數據,從后面一個數重新開始,當發現累加結構大於記錄的最大值時,則替換,最后比較完后,記錄的最大值就為真實的最大值。
感謝各位網絡技術好人的分享==