LeetCode 数据结构与算法:最大子数组和

  • 打开我的题库,调为简单难度。

  • 计算最大子数,直接给我难住。

  • 报错铺满屏幕,凝望没有思路。

  • 缝缝补补做出,击败零个用户。

  • 翻阅评论找补,令我勃然大怒。

     

  • 打开思维第一步,编写代码求数组,

  • 没有现成的道路,不服就干纸老虎。

  • 为什么要去看每个元素加进来会对当前的子数组造成什么影响?

  • 咱们学会反向思维,看看前面的子数组对当前元素造成什么影响。

  • 若前面的子数组 加上 当前元素 后,值比当前元素小,说明前面的子数组太拉胯,一定是负数,拖了当前元素后腿,要不得。那咱就从这里重新起个头。

  • 若前面的子数组 加上 当前元素 后,值比当前元素大,说明这个子数组做了贡献,要的,带上当前元素一起玩。

  • 还有一点小问题,当前元素是负数,前面的子数组是正数,根据上面的规则,子数组仍然是有贡献,加上去后变小了。

  • 解决方法很简单,记录中间产生的max。

  • class Solution {
    public:
        int maxSubArray(vector<int>& nums)
        {
            int res = nums[0];
            int i = 1;
            int max =res;
            while(i<nums.size())
            {
                if(res + nums[i] <= nums[i])
                {
                    res = nums[i];
                }
                else
                {
                    res += nums[i];
                }
                max = res>max?res:max;
                i++;
            }
            return max;
        }
    };

    算法有点拉胯,成绩还算勉强,内功需要加强,还望高人指点。

     

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值