給定乙個整數陣列 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"
/ system("pause");
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.暴力遍歷...