求子數(shù)組最大和的實(shí)例代碼
題目:
輸入一個整形數(shù)組,數(shù)組里有正數(shù)也有負(fù)數(shù)。
數(shù)組中連續(xù)的一個或多個整數(shù)組成一個子數(shù)組,每個子數(shù)組都有一個和。
求所有子數(shù)組的和的最大值。要求時間復(fù)雜度為O(n)。
例如輸入的數(shù)組為1, -2, 3, 10, -4, 7, 2, -5,和最大的子數(shù)組為3, 10, -4, 7, 2,
因此輸出為該子數(shù)組的和18。
找到狀態(tài)轉(zhuǎn)移方程,dp[i]表示前i個數(shù)中,包含i的子數(shù)組的最大和。要么第i個數(shù)自己最大,要么他要和包含i-1的子數(shù)組最大和(即dp[i-1])聯(lián)合在一起.
即dp[i] = max{arr[i],dp[i-1]+arr[i]};
代碼如下;
#include <stdio.h>
#define max(a,b) (a)>(b)?(a):(b)
int res(int* arr, int len){
//學(xué)到一個定義最小數(shù)的方法:)
int max = -(1<<31);
int i;
for(i=1;i<len;i++){
arr[i] = max(arr[i],arr[i-1]+arr[i]);
if(max < arr[i]) max = arr[i];
}
return max;
}
int main(){
int arr[] = {1,-2,3,10,-4,7,2,-5};
printf("%d\n",res(arr,8));
return 0;
}
相關(guān)文章
C++?Qt開發(fā)之使用QNetworkAccessManager實(shí)現(xiàn)Web網(wǎng)頁訪問
Qt?是一個跨平臺C++圖形界面開發(fā)庫,利用Qt可以快速開發(fā)跨平臺窗體應(yīng)用程序,本文主要介紹了如何運(yùn)用QNetworkAccessManager組件實(shí)現(xiàn)Web網(wǎng)頁訪問,需要的可以參考下2024-03-03C語言實(shí)現(xiàn)賓館管理系統(tǒng)課程設(shè)計(jì)
這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)賓館管理系統(tǒng)課程設(shè)計(jì),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-03-03C++優(yōu)先級隊(duì)列的使用指南與模擬實(shí)現(xiàn)
優(yōu)先級隊(duì)列是一種特殊的隊(duì)列,其中每個元素都有一個與之關(guān)聯(lián)的優(yōu)先級,優(yōu)先級較高的元素會在隊(duì)列中較早地被處理,而優(yōu)先級較低的元素會在后續(xù)處理,本文給大家介紹C++優(yōu)先級隊(duì)列的使用指南與模擬實(shí)現(xiàn),需要的朋友可以參考下2023-09-09Windows下VScode實(shí)現(xiàn)簡單回聲服務(wù)的方法
回聲服務(wù)端可以將客戶端傳來的信息,再原封不動地發(fā)送給客戶端,因而得名 epoch 服務(wù)。接下來通過本文給大家介紹Windows下VScode實(shí)現(xiàn)簡單回聲服務(wù)的方法,感興趣的朋友一起看看吧2021-08-08