0
点赞
收藏
分享

微信扫一扫

求最大子数组和(数据结构和算法C++)

他说Python 2022-01-09 阅读 43

题目

给你一个整数数组 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;
    };
};
举报

相关推荐

0 条评论