Leetcode 53. 最大子序和(DAY 84) ---- Leetcode Hot 100


原题题目


在这里插入图片描述


代码实现(首刷自解)


class Solution {
public:
    int maxSubArray(vector<int>& nums) {
        int ret = nums[0],temp = 0;
        for(const auto& num:nums)
        {
            temp+=num;
            ret = max(temp,ret);
            temp = max(temp,0);
        }
        return ret;
    }
};

代码实现(二刷自解DAY 138)


class Solution {
public:
    int maxSubArray(vector<int>& nums) {
        int sum = max(nums[0],0),ret = nums[0];
        for(int i=1;i<nums.size();++i)
        {
            sum += nums[i];
            ret = max(sum,ret);
            if(sum < 0) sum = 0;
        }
        return ret;
    }
};

代码实现(三刷自解 DAY 197 C++ O(n))


class Solution {
public:
    int maxSubArray(vector<int>& nums) {
        int ret = INT_MIN,tmp = 0;
        for(int i = 0;i < nums.size();++i)
        {
            tmp += nums[i];
            ret = max(ret,tmp);
            if(tmp <= 0)    tmp = 0;
        }
        return ret;
    }
};

代码实现(三刷自解 DAY 197 返回子数组)


class Solution {
public:
    vector<int> maxSubArray(vector<int>& nums) {
        int left = 0,right = 1,tmpleft = 0,ret = INT_MIN,tmp = 0;
        for(int i = 0;i < nums.size();++i)
        {
            tmp += nums[i];
            if(tmp > ret)
            {
                ret = tmp;
                left = tmpleft;
                right = i+1;
            }
            if(tmp <= 0)
            {
                tmpleft = i+1;
                tmp = 0;
            }
        }

        vector<int> v;
        for(int i = left;i < right;++i)
            v.emplace_back(nums[i]);
        return v;
    }
};

代码实现(四刷自解 DAY 268 C++)


class Solution {
public:
    int maxSubArray(vector<int>& nums) {
      int left = 0, retleft = 0, retright = 0;
      int sum = nums[0],tmp = (sum >= 0 ? sum : 0);
      int size = nums.size();
      
      for(int i = 1; i < size; ++i)
      {
        tmp += nums[i];
        if(tmp > sum)
        {
          sum = tmp;
          retleft = left;
          retright = i;
        }
        
        if(tmp < 0)
        {
          left = i;
          tmp = 0;
        }
      }

      return sum;
    }
};

代码实现(五刷自解 DAY 1 Golang)


func max(x, y int) int {
  if x >= y {
    return x
  } else {
    return y
  }
}

func maxSubArray(nums []int) int {
  ret, tmpsum := nums[0], max(nums[0], 0)

  for i := 1; i < len(nums); i++ {
    tmpsum += nums[i]
    ret = max(ret, tmpsum)
    if tmpsum < 0 {
      tmpsum = 0
    }
  }
  return ret
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Love 6

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值