给出数组[−2,2,−3,4,−1,2,1,−5,3],符合要求的子数组为[4,−1,2,1],其最大和为6
class Solution {
public:
* @param nums: A list of integers
* @return: A integer indicate the sum of max subarray
*/
int maxSubArray(vector<int> &nums) {
//1.prefix_sum solution
if (nums.size() < 0) return 0;
int prefix_sum = 0;
int min_sum = 0;
int result = INT_MIN;
for (auto n : nums) {
prefix_sum += n;
result = max(result, prefix_sum - min_sum);
min_sum = min(prefix_sum, min_sum);
}
return result;
//2.动态规划dp solution
if (nums.size() < 0) return 0;
int n = nums.size();
vector<int> dp(n, 0);
dp[0] = nums[0];
for (int i = 1; i != n; ++i) {
dp[i] = max(0, dp[i-1]) + nums[i];
}
int max_value = INT_MIN;
for (auto v : dp) {
max_value = max(v, max_value);
}
return max_value;
/* 3.贪心算法greedy solution */
if (nums.size() == 0) return 0;
int n = nums.size();
int sum = 0;
int slice = INT_MIN;
for (auto n : nums) {
sum += n;
slice = max(sum, slice);
sum = max(0, sum);
}
return slice;
}
};