53 最大子序和

2021-10-12 10:20:55 字數 1115 閱讀 4937

//53. 最大子序和

/*思路一:動態規劃,列表,因為時間太長失敗了

*/int solution::

maxsubarray

(vector<

int>

& nums)

else

map[i]

[j]= map[i]

[j -1]

+ nums[j];if

(map[i]

[j]> result)

result = map[i]

[j];}}

return result;}/*

錯誤思路2,原因在於記錄的最大值是有可能不挨著最新的乙個元素的,因此下面的思路是個假的動態規劃

思路二:動態規劃

思考動態規劃,從1開始思考

如果給乙個數,那麼最大值就是它,maxval=nums[0]

如果給兩個數,那麼最大和的連續子陣列是 maxval=max(1.第乙個(maxval),2.或者第二個(nums[1]),3.或者兩個的和(maxval+nums[1]))

三個數,結果應該是,max(maxval+nums[2],nums[2],maxval)

[-2,1,-3,4,-1,2,1,-5,4] */

int solution::

maxsubarray2

(vector<

int>

& nums)

return maxval;}/*

思路3:動態規劃

其實問啥就設啥就好,就設當前的以第 i 個數結尾的「連續子陣列的最大和」 是fi

他和前面的關係是啥呢?

要麼就是前面的f(i-1)+當前的數,要麼就是等於當前的數

所以核心的表示式

f(i)=max(f(i-1)+nums[i],nums[i])

最終在所有的fi中取最大值就可以

*/int solution::

maxsubarray2

(vector<

int>

& nums)

return maxval;

}

先碼住乙個大神的分治演算法,對於這個題目看起來有些複雜

此題的彙總見解

53 最大子序和

給定乙個整數陣列nums,找到乙個具有最大和的連續子陣列 子陣列最少包含乙個元素 返回其最大和。示例 輸入 2,1,3,4,1,2,1,5,4 輸出 6 解釋 連續子陣列 4,1,2,1 的和最大,為 6。兩個變數,乙個是ans,用來儲存 更新子串行 乙個maxn,始終儲存著當前最大的子串行。子串行...

53 最大子序和

題目 給定乙個整數陣列nums,找到乙個具有最大和的連續子陣列 子陣列最少包含乙個元素 返回其最大和。示例 輸入 2,1,3,4,1,2,1,5,4 輸出 6解釋 連續子陣列 4,1,2,1 的和最大,為 6。思路 因為要考慮連續,所以需注意兩點,與當前比較的必定包含當前節點的上乙個節點,前n個節點...

53 最大子序和

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