程式設計之美2 14求子陣列之和的最大值

2021-06-04 11:25:35 字數 1173 閱讀 5077

分而治之的思想(divide and conquer)

#includeusing namespace std;

int max(int a,int b)

int maxsum(int *a,int low,int high)

#includeusing namespace std;

int max(int a,int b)

int maxsum(int *a,int size)

return nall;

}int main()

; int b[6]=;

int c[5]=;

cout<>i;

return 0;

}

動態規劃版:

擴充套件問題1

當陣列首尾相連時,求子陣列之和的最大值

這時需解可能跨越a[0]與a[n-1]的情況,可以分兩段計算

以a[0]開始的陣列的最大值(a[0],a[1],...a[i])

以a[n]結尾的子陣列的最大值(a[j],a[j+1],...a[n-1])

若i則含有a[0]與a[n-1]的最大值為

a[0]+a[1]+...+a[i]+(a[j]+...a[n-1]

若i>j

如陣列中無負數

則含有a[0]與a[n-1]的最大值為

整個陣列的和

否則需用整個陣列的和減去子陣列之和的最小值(子陣列之和為負)

a[0]+a[1]+..a[n-1]-min(子陣列之和)

#includeusing namespace std;

int max(int x,int y)

int min(int x,int y)

int maxsum(int *a,int n)

start_sum=a[0];

start_index=0;

temp_sum=start_sum;

for(j=1;j=0;k--)

if(negall<0)

if(nstart>nall)

} return nall;

}

int main()

; int b[6]=;

int c[5]=;

cout<

程式設計之美2 14 求子陣列之和的最大值

問題描述 乙個有n個整數元素的一維陣列 a 0 a n 1 這個陣列當然有很多子陣列,那麼子陣列之和的最大值是多少呢?思路一 最直接能想到的方法就是列舉,暴力解法,複雜度為o n 2 思路二 遞迴解法,將陣列分成長度相等的兩段陣列,分別為a 0 a n 2 1 和a n 2 a n 1 分別求出最大...

2 14 求子陣列之和的最大值

include using namespace std int maxsum int src,int n,int spos,int epos else if start all return all int max int a,int b,int c else void toneg int src,...

程式設計之美2 14 求陣列的子陣列之和的最大值

問題描述 乙個有n個整數元素的一維陣列 a 0 a 1 a n 1 它包含很多子陣列,求子陣列之和的最大值,當陣列元素全部為負的時候,有兩種處理辦法,第一種是返回0,第二種是返回陣列中最大的負數。解法1 使用暴力法,假設最大的一段陣列為a i a j 則對i 0 n 1 j i n 1,遍歷一遍,求...