题目描述

给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。

示例:

输入: [-2,1,-3,4,-1,2,1,-5,4]
输出: 6
解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。

进阶:

  • 如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的分治法求解。

解答 By 海轰

提交代码(暴力解法-超时😭)

int maxSubArray(vector<int>& nums) {
int len=nums.size();
int max=nums[0];

for(int i=1;i<=len;++i)
{
for(int j=0;j<=len-i;++j)
{
int temp=0;
for(int k=j;k<j+i;++k)
{
temp+=nums[k];
if(max<temp)
max=temp;
}
}
}
return max;
}

运行结果

LeetCode刷题(27)~最大子序和【暴力+贪心+动态规划+分治 难点:分治】_提交代码


提交代码(贪心)

int maxSubArray(vector<int>& nums) {
int len=nums.size();
int curmax=nums[0];
int result=nums[0];
for(int i=1;i<len;++i)
{
if(curmax<0)
{
curmax=nums[i];
result=max(result,curmax);
}
else
{
curmax+=nums[i];
result=max(result,curmax);
}

}
return result;
}

运行结果

LeetCode刷题(27)~最大子序和【暴力+贪心+动态规划+分治 难点:分治】_leetcode_02

其他解答

  • 动态规划
  • 分治【难点】

动态规划

int maxSubArray_3(vector<int>& nums) {
int pre = 0, maxAns = nums[0];
for (const auto &x: nums) {
pre = max(pre + x, x);
maxAns = max(maxAns, pre);
}
return maxAns;
}

LeetCode刷题(27)~最大子序和【暴力+贪心+动态规划+分治 难点:分治】_提交代码_03

C++测试代码

#include <iostream>
#include<vector>
using namespace std;
// 方法一:暴力 注:超时
int maxSubArray_1(vector<int>& nums) {
int len=nums.size();
int max=nums[0];

for(int i=1;i<=len;++i)
{
for(int j=0;j<=len-i;++j)
{
int temp=0;
for(int k=j;k<j+i;++k)
{

temp+=nums[k];
if(max<temp)
max=temp;
}
}
}
return max;
}
// 方法二:贪心
int maxSubArray_2(vector<int>& nums) {
int len=nums.size();
int curmax=nums[0];
int result=nums[0];
for(int i=1;i<len;++i)
{
if(curmax<0)
{
curmax=nums[i];
result=max(result,curmax);
}
else
{
curmax+=nums[i];
result=max(result,curmax);
}

}
return result;
}
// 方法三:贪心
int maxSubArray_3(vector<int>& nums) {
int pre = 0, maxAns = nums[0];
for (const auto &x: nums) {
pre = max(pre + x, x);
maxAns = max(maxAns, pre);
}
return maxAns;
}

int main()
{
vector<int> a;
a.push_back(-2);
a.push_back(-3);
a.push_back(-3);
a.push_back(4);
a.push_back(-1);
a.push_back(2);
a.push_back(1);
a.push_back(-5);
a.push_back(4);
cout<<maxSubArray_3(a)<<endl;
return 0;
}

题目来源

链接:https://leetcode-cn.com/leetbook/read/top-interview-questions-easy/xn3cg3/
来源:力扣(LeetCode)