給定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 ...