PTA 01 複雜度1 最大子列和問題

2021-10-04 02:36:30 字數 3125 閱讀 4943

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

本題旨在測試各種不同的演算法在各種資料情況下的表現。各組測試資料特點如下:

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

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

6

-2 11 -4 13 -5 -2

根據浙江大學的資料結構課程,陳越姥姥的講解,這裡給出她在課堂上四個演算法的實現**。

演算法1:複雜度t(n) = o(n^3)

int

maxsubseqsum1

(int a,

int n)

//j迴圈結束

}//i迴圈結束

return max;

}

演算法2:複雜度t(n) = o(n^2)
int

maxsubseqsum2

(int a,

int n)

//j迴圈結束

}//i迴圈結束

return max;

}

演算法3 ,分而治之 ,複雜度o(nlogn)
int

max3

(int a,

int b,

int c )

intdivideandconquer

(int list,

int left,

int right )

/* 下面是"分"的過程 */

center =

( left + right )/2

;/* 找到中分點 */

/* 遞迴求得兩邊子列的最大和 */

maxleftsum =

divideandconquer

( list, left, center )

; maxrightsum =

divideandconquer

( list, center+

1, right )

;/* 下面求跨分界線的最大子列和 */

maxleftbordersum =

0; leftbordersum =0;

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

)/* 左邊掃瞄結束 */

maxrightbordersum =

0; rightbordersum =0;

for( i=center+

1; i<=right; i++

)/* 右邊掃瞄結束 */

/* 下面返回"治"的結果 */

return

max3

( maxleftsum, maxrightsum, maxleftbordersum + maxrightbordersum );}

intmaxsubseqsum3

(int list,

int n )

int

maxsubseqsum4

(int a,

int n )

return maxsum;

}

#include

"stdio.h"

#define size 100000

intmaxsubseqsum1

(int a,

int n)

}return max;

}int

maxsubseqsum2

(int a,

int n)

}return max;

}// 第三個演算法

intmax3

(int a,

int b,

int c )

intdivideandconquer

(int list,

int left,

int right )

/* 下面是"分"的過程 */

center =

( left + right )/2

;/* 找到中分點 */

/* 遞迴求得兩邊子列的最大和 */

maxleftsum =

divideandconquer

( list, left, center )

; maxrightsum =

divideandconquer

( list, center+

1, right )

;/* 下面求跨分界線的最大子列和 */

maxleftbordersum =

0; leftbordersum =0;

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

)/* 左邊掃瞄結束 */

maxrightbordersum =

0; rightbordersum =0;

for( i=center+

1; i<=right; i++

)/* 右邊掃瞄結束 */

/* 下面返回"治"的結果 */

return

max3

( maxleftsum, maxrightsum, maxleftbordersum + maxrightbordersum );}

intmaxsubseqsum3

(int list,

int n )

intmaxsubseqsum4

(int a,

int n )

return maxsum;

}int

main

(int argc,

char

const

*ar**)

printf

("%d\n"

,maxsubseqsum4

(a, n));

}return0;

}

PTA 01 複雜度1 最大子列和問題

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

PTA 複雜度1 最大子列和問題

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

01 複雜度1 最大子列和問題

給定k個整數組成的序列,連續子列 被定義為,其中 1 i j k。最大子列和 則被定義為所有連續子列元素的和中最大者。例如給定序列,其連續子列有最大的和20。現要求你編寫程式,計算給定整數序列的最大子列和。輸入格式 輸入第1行給出正整數 k 100000 第2行給出k個整數,其間以空格分隔。輸出格式...