题目
给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
子数组 是数组中的一个连续部分。
示例 1:
输入:nums = [-2,1,-3,4,-1,2,1,-5,4]
输出:6
解释:连续子数组 [4,-1,2,1] 的和最大,为 6 。
示例 2:
输入:nums = [1]
输出:1
示例 3:
输入:nums = [5,4,-1,7,8]
输出:23
纠错:
第一个方法暴力解,提交以后时间复杂度超时了。。。
此外,在边界数组中的检验修改了好多次,比如[-1,2],[-1,-2],[-1]
本人吸取总结教训和经验:
- 检验时考虑边界的特殊情况,比如数组里只有一个或两个元素,全为负数等
- 对于求和类。int sum = 0 有负数风险,不如一开始初始化为nums[0];
- 对于for循环不清楚边界的问题,在旁边备注一个例子测试一下可取边界
- 写函数时不要忘了写返回值。。。
class Solution {
public:
int maxSubArray(vector<int>& nums) {
int n=nums.size();//2
int sum=nums[0];
if (n==1)
return nums[0];
for (int i=0; i<n; i++)//0-1
{
for (int j=n-1; j>0; j--)//1
{
//long int subsum=std::accumulate(nums.begin()+i,nums.end()-j,0);
int subsum=0;
for (int m=i,n=j;m<=n;m++)//
{
subsum+=nums[m];
if ( sum < subsum )
sum = subsum;
};
};
};
return sum;
};
};