學習之路不可停止,最近在玩C語言,自己也動手嘗試寫了些實例,下面武林小編給各位分享C語言中求子數組最大和的實現,在這個過程里面,或許能增長見識,一切都歸于我們的心態與行動。
題目:
輸入一個整形數組,數組里有正數也有負數。
數組中連續的一個或多個整數組成一個子數組,每個子數組都有一個和。
求所有子數組的和的最大值。要求時間復雜度為O(n)。
例如輸入的數組為1, -2, 3, 10, -4, 7, 2, -5,和最大的子數組為3, 10, -4, 7, 2,
因此輸出為該子數組的和18。
找到狀態轉移方程,dp[i]表示前i個數中,包含i的子數組的最大和。要么第i個數自己最大,要么他要和包含i-1的子數組最大和(即dp[i-1])聯合在一起.
即dp[i] = max{arr[i],dp[i-1]+arr[i]};
代碼如下;
?
?
int res(int* arr, int len){
??? //學到一個定義最小數的方法:)
??? int max = -(1??? int i;
??? for(i=1;i
??????? if(max ??? }
??? return max;
}
int main(){
??? int arr[] = {1,-2,3,10,-4,7,2,-5};
??? printf("%d/n",res(arr,8));
??? return 0;
}
以上就是C語言中求子數組最大和的實現,如果有哪些地方還不清楚可以留言給我,如果覺得我寫得不錯的話,請繼續關注武林技術頻道,謝謝!
新聞熱點
疑難解答
圖片精選