最大子序和 dps

2021-10-06 19:30:15 字數 1059 閱讀 4522

給定乙個整數陣列 num ,找到乙個具有最大和的連續子陣列(子陣列最少包含乙個元素),輸出其最大和。

例項:

輸入:[

-2,1,

-3,4,

-1,2,

1,-5,

4];輸出:

6解釋: 連續子陣列 [4,

-1,2,

1] 的和最大為 6。

dps高階演算法思路:

首先我們用ai代表num[i],用b(i)代表第i個數結尾的連續子陣列的最大和,那麼我們要求的答案就是:

max (0<=i<=n-1)

因此我們只需求出每個位置的b(i),然後輸出b陣列中的最大值即可。求b(i)時考慮到b(i)與(b(i-1)+ai)、ai這兩個有關,取決於這兩個大小關係,於是可以寫出dps轉移方程:

b(i)=max

最後用b陣列來儲存b(i)的值,迴圈求出所有f(i)。可以用乙個變數pre來儲存當前b(i)的b(i-1)的值,從而讓空間複雜度降低到o(1)。

#include

#include

//引入max函式

using

namespace std;

intmain()

cout<<

"最大連續子陣列之和為:\n"

return0;

}

複雜度:

·時間複雜度:o(n),n為num陣列的長度,即只需遍歷迴圈一次陣列就可求得答案;

·空間複雜度:o(1)。只需常數空間存放若干變數。

最大子序和

演算法一 對這個問題,有乙個相對複雜的 o nlogn 的解法,就是使用遞迴。如果要是求出序列的位置的話,這將是最好的演算法了 因為我們後面還會有個 o n 的演算法,但是不能求出最大子串行的位置 該方法我們採用 分治策略 divide and conquer 在我們例子中,最大子串行可能在三個地方...

最大子序和

給定乙個整數陣列 nums 找到乙個具有最大和的連續子陣列 子陣列最少包含乙個元素 返回其最大和。示例 輸入 2,1,3,4,1,2,1,5,4 輸出 6 解釋 連續子陣列 4,1,2,1 的和最大,為 6。方法一 雙指標窮舉法 思路 要找到最大和的連續陣列,那麼就將所有可能的和都拿到,取到最大的即...

最大子序和

給定乙個整數陣列nums,找到乙個具有最大和的連續子陣列 子陣列最少包含乙個元素 返回其最大和。示例 輸入 2,1,3,4,1,2,1,5,4 輸出 6 解釋 連續子陣列 4,1,2,1 的和最大,為 6。高階 如果你已經實現複雜度為 o n 的解法,嘗試使用更為精妙的分治法求解。分析 1.暴力遍歷...