題目:最大子序和
思路分析
採用動態規劃,建立動態陣列dp
,關鍵是要捋清楚dp[i]
是啥,如何由之前的dp值
來求當前的dp[i]
?
定義狀態:dp[i]
表示索引從0到i的元素組成的陣列中最大子序和;
初始狀態:dp陣列
的第乙個元素也就是陣列的第乙個元素本身,dp[0] = nums[0]
;
狀態轉移方程:如果dp[i-1]
大於0,那麼很顯然dp[i]
的值就是在其基礎上再加上乙個nums[i]
;而當dp[i-1]
小於0,那麼dp[i-1]
與nums[i]
兩者的和顯然不如nums[i]
本身的大,由於我們要連續陣列最大和,所以直接拋棄這段就可以了,從當前元素nums[i]
開始累計。
因此,轉移方程為:dp[i] = min + nums[i]
;
根據dp
的初始狀態和轉移方程,我們可以將dp陣列填滿,每個位置上的值代表著以這個位置元素結尾的最大連續子陣列的最大和。因此,只需從dp中找到最大值即可。
class
solution
return maxsubsum;
}}
先diss下上述的動態規劃。在動態規劃中,單獨拿出一塊o(n)的空間來存放每段陣列的dp狀態值,然後在存放的同時記錄最大的狀態值。你細品,記錄的這些dp狀態值,除了最大值之外,其他的都用不著。那麼不存放這些多餘的狀態值,只要最大值可以麼?當然,不然我這麼多嘴幹嘛!
思路分析
初始化
遍歷,對每乙個元素進行如下操作:
返回
class
solution
}return maxsum;
}}
力扣 53 最大子序和
題目描述 簡單 給定乙個整數陣列nums,找到乙個具有最大和的連續子陣列 子陣列最少包含乙個元素 返回其最大和。題目鏈結 示例 1 輸入 2,1,3,4,1,2,1,5,4 輸出 6解釋 連續子陣列 4,1,2,1 的和最大,為 6。演算法分析 設dp i 表示以第i個數結尾的子陣列的最大和,那麼只...
力扣53 最大子序和
給定乙個整數陣列 nums 找到乙個具有最大和的連續子陣列 子陣列最少包含乙個元素 返回其最大和。示例 輸入 2,1,3,4,1,2,1,5,4 輸出 6 解釋 連續子陣列 4,1,2,1 的和最大,為 6。法一 利用二級指標申請乙個二維陣列 a int malloc sizeof int m fo...
力扣題解 最大子序和
題目 給定乙個整數陣列 nums 找到乙個具有最大和的連續子陣列 子陣列最少包含乙個元素 返回其最大和。int n nums.length int msa newint n msa 0 nums 0 int max msa 0 for int j 1 j return max 解析 求最大子序和,最...