在题解里学习的方法链接:
C++实现:
解法1:暴力解法
class Solution {
public:
int maxSubArray(vector<int>& nums) {
int max = INT_MIN;//返回值类型为int型,因此初始值定义为理论意义上的最小值
int numsSize = int(nums.size());
for (int i = 0; i < numsSize; i++)
{
int sum = 0;
for (int j = i; j < numsSize; j++)
{
sum += nums[j];
if (sum > max)
{
max = sum;
}
}
}
return max;
}
};
解法2:动态规划
class Solution {
public:
int maxSubArray(vector<int>& nums) {//这里的返回值类型为int型
int res = nums[0];
vector<int> dp(nums.size());//dp[i]表示以nums[i]结尾的子序的和
//vector<int> dp;//会出错
dp[0] = nums[0];
for(int i=1;i<nums.size();i++){
dp[i] = max(dp[i-1]+nums[i],nums[i]);
//更新res的值
if(res < dp[i]){
res = dp[i];
}
}
return res;
}
};
解法3:贪心算法
class Solution {
public:
int maxSubArray(vector<int>& nums) {
int res = INT_MIN;
int sum = 0;
int numsSize = nums.size();
for(int i=0;i<numsSize;i++){
sum += nums[i];
res = max(sum,res);
if(sum<0){
sum = 0;
}
}
return res;
}
};