題目(鏈接)
給你一個整數陣列nums,請你找出一個具有最大和的連續子陣列(子陣列最少包含一個元素),回傳其最大和,
子陣列是陣列中的一個連續部分,
示例 1:
輸入:nums = [-2,1,-3,4,-1,2,1,-5,4]
輸出:6
解釋:連續子陣列 [4,-1,2,1] 的和最大,為 6 ,
示例 2:
輸入:nums = [1]
輸出:1
示例 3:
輸入:nums = [5,4,-1,7,8]
輸出:23
提示:
1 <= nums.length <= 105-104 <= nums[i] <= 104
題解
思路:
- 動態規劃
- 判斷是否需要加上當前位置,如果
f[i-1] + nums[i] >= nums[i],那么nums[i]的最大子陣列就是nums[i - 1]的最大子陣列加上nums[i];如果f[i - 1] + nums[i]比nums[i]還小的話,因為需要連續,就沒有必要加上前面的數字了,從當前位置新開一個子陣列,
code:
class Solution {
public:
int maxSubArray(vector<int>& nums) {
int n = nums.size();
int res = nums[0];
int f[n + 10];
f[0] = nums[0];
for (int i = 1; i < n; i ++){
f[i] = max(nums[i], f[i - 1] + nums[i]);
res = max(res, f[i]);
}
return res;
}
};
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/507216.html
標籤:其他
上一篇:動態格子演算法
下一篇:VSCODE 配置遠程除錯環境
