最大子串行和問題的多種解法

2021-09-12 14:46:46 字數 1244 閱讀 2985

/*

返回最大和

*/int

maxsum_1

(const

int a,

int n)

else

}return maxsum;

}//返回最大和,同時列印出子串行邊界

intmaxsum_2

(const

int a,

int n)

thissum +

= a[j];if

(thissum > maxsum)

else

} cout << start <<

" "<< end << endl;

return maxsum;

}

演算法思想:

最大子串行和可能在三處出現:

第三種情況可以通過求前半部分的最大和(包含前半部分最後乙個元素) 以及 後半部分的最大和而得到(包含後半部分第乙個元素)

int

maxsum_3

(const

int a,

int left,

int right)

center =

(left + right)/2

;//第一種情況

maxleftsum =

maxsum_3

(a, left, center)

;//第二種情況

maxrightsum =

maxsum_3

(a, center +

1, right)

; maxleftbordersum =0;

leftbordersum =0;

//第三種情況

for(

int i = center; i >= left;

--i)

maxrightbordersum =

0; rightbordersum =0;

for(

int i = center +

1; i <= right;

++i)

return

max();

}

int

maxsum_4

(const

int a,

int n)

}return maxsum;

}

深入 最大子串行和(多種演算法)

給定乙個整數序列,a0,a1,a2,an 項可以為負數 求其中最大的子串行和。如果所有整數都是負數,那麼最大子串行和為0 例如 對於序列 2,11,4,13,5,2。所求的最大子串行和為20 從11到13,即從a1到a3 用於測試下面 的的主函式 如下 注意要更改呼叫的函式名 cpp view pl...

最大子串行和問題

問題 給定一整數序列a1,a2,an 可能有負數 求a1 an的乙個子串行ai aj,使得ai到aj的和最大 例如 整數序列 2,11,4,13,5,2,5,3,12,9的最大子串行的和為21。對於這個問題,最簡單也是最容易想到的那就是窮舉所有子串行的方法。利用三重迴圈,依次求出所有子串行的和然後取...

最大子串行和問題

問題描述 給定乙個整數序列 可能有負數 求一子串行 記為l 使得該子串行所有元素之和最大。例 給定序列 2,11,4,13,5,2,則最大子串行和為20 11,4,13 方法一 遍歷窮舉 o n 2 略方法二 分治遞迴 o n logn 思路 將輸入序列l分為左右兩個子串行l1和l2,則l 只可能以...