資料結構與演算法 最大子串行和的實現

2021-10-04 22:18:13 字數 2776 閱讀 1897

個人部落格:

學習筆記:/cs-notes

最大子串行和

【題目】

給定(可能有負數)整數a(1)、a(2)、……a(n),求 a(1)+a(2)+……+a(j)的最大值。

為方便起見,若所有的整數為負數,則最大子串行和為0.

也就是:在一系列整數中,找出連續的若干個整數,這若干個整數之和 最大。

【**實現】

c 語言版:函式原型為 int maxsubsum(int a);

#include

intmaxsubsum

(int a)

if(sum > maxsum)}}

return maxsum;

}int

main()

;int max =

maxsubsum

(a);

printf

("%d\n"

,max)

;return0;

}

#include

intmaxsubsum

(int a,

int n)

if(sum > maxsum)}}

return maxsum;

}int

main()

;int a=

;int len =

sizeof

(a)/

sizeof

(int);

//有負數所以 strlen(a) 不能用

int max =

maxsubsum

(a, len)

;printf

("%d\n"

,max)

;return0;

}

c 語言版

#include

intmaxsubsum

(int a,

int n)}}

return maxsum;

}int

main()

;int a=

;int len =

sizeof

(a)/

sizeof

(int);

//有負數所以 strlen(a) 不能用

int max =

maxsubsum

(a, len)

;printf

("%d\n"

,max)

;return0;

}

c 語言版

#include

intmaxsubsum

(int a,

int left,

int right)

else

}int center =

(left + right)/2

;int maxleftsum =

maxsubsum

(a, left, center)

;int maxrightsum =

maxsubsum

(a, center +

1, right)

;// 左端處理

int maxleftbordersum =0;

int leftbordersum =0;

int i;

for(i = center; i >= left; i--)}

// 右端處理

int maxrightbordersum =0;

int rightbordersum =0;

for(i = center +

1; i <= right; i++)}

// 返回最大值

int maxbordersum = maxleftbordersum + maxrightbordersum;

return maxbordersum > maxleftsum ? maxbordersum > maxrightsum ? maxbordersum : maxrightsum

: maxleftsum > maxrightsum ? maxleftsum : maxrightsum;

}int

main()

;int a=

;int max =

maxsubsum

(a,0

,sizeof

(a)/

sizeof

(int)-

1);printf

("%d\n"

,max)

;return0;

}

c 語言版

#include

intmaxsubsum

(int a,

int n)

else

if(sum > maxsum)

}return maxsum;

}int

main()

;int a=

;int len =

sizeof

(a)/

sizeof

(int);

//有負數所以 strlen(a) 不能用

int max =

maxsubsum

(a, len)

;printf

("%d\n"

,max)

;return0;

}

資料結構 最大子串行和

最近我打算重溫一遍資料結構,於是又遇到了求最大子串行和這一基本問題。記得之前我就沒有明白透徹,這次便記錄下來。求最大子串行和,即求乙個序列中,和值最大的連續子串行。首先採用暴力解法,即求出所有的子串行和,得到最大和,這個演算法的時間複雜度是o n 2 int maxsubsum int k,int ...

資料結構與演算法分析 最大子串行和問題

最大連續子數列和一道很經典的演算法問題,給定乙個數列,其中可能有正數也可能有負數,我們的任務是找出其中連續的乙個子數列 不允許空序列 使它們的和盡可能大。我們一起用多種方式,逐步優化解決這個問題。例 輸入時,答案為 20 從a2到 a4 演算法1 include n是陣列長度,a是待計算的陣列,放在...

資料結構與演算法分析 2 4 求最大子串行和

問題描述 給出指定整數序列,求出最大的子串行和 解決思路 方法一從i到j進行掃瞄,複雜度為o n3 方法二每次兩重迴圈,複雜度為o n2 方法三迴圈一次,複雜度為o n3 但是對輸入所有資料為負數時是不成立的 演算法實現 includeint maxseqsumofn3 int a,int n in...