動態規劃最大欄位和
輸入一個整型陣列,陣列中的一個或連續多個整陣列成一個子陣列。求所有子陣列的和的最大值。
要求時間複雜度為O(n)。
示例1:
輸入: nums = [-2,1,-3,4,-1,2,1,-5,4] 輸出: 6 解釋: 連續子陣列 [4,-1,2,1] 的和最大,為
6。
class Solution {
public:
int maxSubArray(vector<int>& nums) {
int n=nums.size();
vector<int> dp(n,0);
dp[0]=nums[0];
for(int i=1;i<n;i++){
dp[i]=max(dp[i-1]+nums[i],nums[i]);
}
sort(dp.begin(),dp.end());
for(auto it:dp){
cout<<it<<" ";
}
return dp[n-1];
}
};
狀態轉移方程
dp[i]:代表以nums[i]結尾的最大欄位和。
dp[i]=max(dp[i-1]+nums[i],nums[i]),根據定義nums[i]必選,則看看dp[i-1]是否要加。
結果返回dp中的最大元素
優化方法
用pre儲存dp[i-1],用max記錄截止目前最大的欄位和。
#include<limits.h>
class Solution {
public:
int maxSubArray(vector<int>& nums) {
int pre=0;//用來記錄當前的最大欄位和
int Max=nums[0];
for(auto &it:nums){
pre=max(pre+it,it);
Max=max(Max,pre);
}
return Max;
}
};
相關文章
- 最大子陣——動態規劃DP動態規劃
- 禮物的最大價值(一維動態規劃&二維動態規劃)動態規劃
- Java 演算法-最大矩形(動態規劃)Java演算法動態規劃
- 【動態規劃】求最大連續bit數動態規劃
- 動態規劃---例題3.最大子段和問題動態規劃
- 動態規劃-最大子矩陣和(ZOJ 1074 TO THE MAX )動態規劃矩陣
- 動態規劃求解矩陣累計和最大的路徑動態規劃矩陣
- 【動態規劃(一)】動態規劃基礎動態規劃
- 磁帶最大利用率問題——動態規劃動態規劃
- 順序表應用8:最大子段和之動態規劃法動態規劃
- 動態規劃動態規劃
- mybatis動態呼叫表名和欄位名MyBatis
- 動態規劃之最短路徑和動態規劃
- 談一談動態規劃和dfs動態規劃
- 動態規劃分析動態規劃
- 動態規劃(DP)動態規劃
- 動態規劃初步動態規劃
- 模板 - 動態規劃動態規劃
- 動態規劃法動態規劃
- 一維動態規劃和二維動態規劃中兩道經典題目動態規劃
- 分治法 && 動態規劃 洛谷P1115 最大子段和動態規劃
- 動態規劃求解最大子段和 (兩種寫法+還原最優解)動態規劃
- hud1151 動態規劃 最大的公共子序列動態規劃
- 演算法系列-動態規劃(1):初識動態規劃演算法動態規劃
- 淺談動態規劃動態規劃
- 有關動態規劃動態規劃
- 動態規劃小結動態規劃
- 動態規劃初級動態規劃
- 動態規劃講義動態規劃
- 好題——動態規劃動態規劃
- 3.動態規劃動態規劃
- 動態規劃-----線性動態規劃
- 動態規劃專題動態規劃
- 區間動態規劃動態規劃
- 動態規劃題單動態規劃
- 雙序列動態規劃動態規劃
- 動態規劃 總結動態規劃
- 動態規劃方法論動態規劃