最大子列和問題 資料結構測試1 1

2021-06-27 21:55:40 字數 1482 閱讀 8997

給定k個整數組成的序列,「連續子列」被定義為,其中 1 <= i <= j <= k。「最大子列和」則被定義為所有連續子列元素的和中最大者。例如給定序列,其連續子列有最大的和20。現要求你編寫程式,計算給定整數序列的最大子列和。

輸入格式:

輸入第1行給出正整數 k (<= 100000);第2行給出k個整數,其間以空格分隔。

輸出格式:

在一行中輸出最大子列和。如果序列中所有整數皆為負數,則輸出0。

輸入樣例:

6-2 11 -4 13 -5 -2

輸出樣例:

20

/*
有多個不同的實現函式,方便比較多個方法的複雜度等情況
*/

#include "stdafx.h"

#include #include #include #include using namespace std;

/*

窮舉法,複雜度最大,o(n^3)

遍歷所有的子串行,求出最大值

多餘操作:i = 0, j = 3時,會計算a[0] + a[1] +…+ a[3];而當i = 0, j = 4時候又會計算a[0] + a[1] +…a[4]

*/long maxsubsum(const vector&a)//最大子列和

if(thissum > maxsum)

maxsum = thissum;

} }return maxsum;}/*

窮舉法:複雜度o(n^2)

修改多餘操作:i = 0, j = 3時,會計算a[0] + a[1] +…+ a[3];而當i = 0, j = 4時候,由於thissum沒有置零,只需要計算thissum+a[4]

*/long maxsubsum1(const vector&a)

} return maxsum;}/*

聯機演算法:線性、最優解

簡析:*/

long maxsubsum2(vector &a)

return maxsum;

}int main()

i = 0;

for(int x =0; x < 2000; x++)//執行若干次計算程式執行時間

cout<>n;

} stop = clock();

duration = ((double)(stop - start)) / clk_tck;

cout<

oj提交:

int main()

cout<>n;

return 0;

}

資料結構 最大子列和問題

最大子列和問題 20 分 給定k個整數組成的序列,連續子列 被定義為,其中 1 i j k。最大子列和 則被定義為所有連續子列元素的和中最大者。例如給定序列,其連續子列有最大的和20。現要求你編寫程式,計算給定整數序列的最大子列和。本題旨在測試各種不同的演算法在各種資料情況下的表現。各組測試資料特點...

資料結構 求最大子列和

陳越姥姥已經講得很好了 傳送門,我只做記錄方便回顧。四種演算法 1.暴力,演算法複雜度 o n 3 2.暴力,演算法複雜度 o n 2 3.分治法 遞迴 演算法複雜度 o nlogn 4.及時處理,演算法複雜度 o n includeint a 100000 int whoismax int i,i...

資料結構與演算法 最大子列和問題

問題 給定n個整數序列,求該序列中存在的最大的連續n個整數和。分析 方法1 最自然的方法是設定子列和的左端索引i和右端索引j,然後通過遍歷的方法找出最大的子列和,其中最簡單的陣列求和也是遍歷相加,因此將會有三層迴圈,計算複雜度為o n 3 為 int maxsum1 int a,int n int ...