题解 | #连续子数组的最大和#
连续子数组的最大和
https://www.nowcoder.com/practice/459bd355da1549fa8a49e350bf3df484?tpId=295&tqId=23259&ru=%2Fpractice%2F5164f38b67f846fb8699e9352695cd2f&qru=%2Fta%2Fformat-top101%2Fquestion-ranking&sourceUrl=%2Fexam%2Foj%3Fpage%3D1%26tab%3D%25E7%25AE%2597%25E6%25B3%2595%25E7%25AF%2587%26topicId%3D295
渐渐对动态规划有感觉了
class Solution {
public:
int FindGreatestSumOfSubArray(vector<int> array) {
// dp[i] 表示结尾元素为i下标的子数组的和的最大值
// 最后一个不一定就是和最大值,因为子数组不一定取到最后一个元素
// 每次取子数组时,记录下最大值
int res = -200;
std::vector<int> dp(array.size(), 0);
// 假设每个元素都为子数组时和最大
for (int i = 0; i < array.size(); ++i) {
dp[i] = array[i];
}
for (int i = 0; i < array.size(); ++i) {
dp[i] = std::max(dp[i], dp[i - 1] + array[i]);
// 以某下标i结尾的子数组,其和达到最大,记录下来
res = std::max(res, dp[i]);
}
return res;
}
};