最大子列和問題

2021-10-06 20:57:51 字數 1401 閱讀 2770

問題陳述:

給定n個整數的序列,求函式ƒ(i, j) = max(1<=iint

maxsubseqsum

(int arr,

int n)}}

return maxsum;

}

int

maxsubseqsum

(int arr,

int left,

int right)

else

}int center =

(left + right)/2

;int leftmaxsum =

maxsubseqsum

(arr, left, center)

;/* 分界線左側最大子數列 */

int rigthmaxsum =

maxsubseqsum

(arr, center+

1, right)

;/* 分界線右側最大子數列 */

/* 以分界線往左求最大子數列 */

int leftbordersum =

0, maxleftbordersum =0;

for(

int i=center; i>=left; i--)}

/* 以分界線往右求最大子數列 */

int rightbordersum =

0, maxrightbordersum =0;

for(

int j=center+

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

/* 跨越分界線最大子數列和 */

int maxbordersum = maxleftbordersum + maxrightbordersum;

return

maxsum

(leftmaxsum, rigthmaxsum, maxbordersum);}

/*** 返回a, b, c三者最大值

*/int

maxsum

(int a,

int b,

int c)

if(a > c)

else

}

時間複雜度計算:

t(n) = 2 * t(n/2) + cn

= 22 * t(n/22) + c2n

= 2k * t(n/2k) + ckn 其中 n/2k = 1

= n * t(1) + cnlog2n
= o(nlogn)

int

maxsubseqsum

(int arr,

int n)

else

if(currentsum <0)

}return maxsum;

}

最大子列和問題

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

最大子列和問題

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

最大子列和問題

給出乙個序列,求出最大子列和。演算法一 long maxsum int a,int n return maxsum 這是乙個窮舉的演算法,有三個巢狀的for迴圈,時間複雜度為o n 3 在計算的時候有很多不必要的重複項,例如當i 0,j 3時,和的計算為 a 1 a 2 a 3 當i 0,j 4時,...