JZ30 连续子数组的最大和

本文最后更新于:2022年4月9日 中午

image-20211008104417272

Solution

  • 贪心算法
1
2
3
4
5
6
7
8
9
10
11
12
13
class Solution {
public:
int FindGreatestSumOfSubArray(vector<int> array) {
int res = INT_MIN;
int sum = 0;
for (int num : array) {
sum += num;
res = max(res, sum);
if (sum < 0) sum = 0;
}
return res;
}
};
  • 动态规划
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Solution {
public:
int FindGreatestSumOfSubArray(vector<int> array) {
int n = array.size();
if (n == 0) return 0;
int res = 0;
vector<int> dp(n, 0); // 以 array[i] 结尾的最大值
dp[0] = array[0];
for (int i = 1; i < n; ++i) {
dp[i] = max(array[i], array[i]+dp[i-1]);
}
return *max_element(dp.begin(), dp.end());
}
};

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!