個人部落格:
學習筆記:/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...