最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 求解最大子序和应该怎么做??|刷题打卡

    正文概述 掘金(灬青芒灬)   2021-03-11   613

    今天的题目是这个53. 最大子序和

    一、先看题

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

    示例1:

    示例2:

    示例3:

    示例4:

    示例5:

    提示:

    • 1<=nums.length<=31041 <= nums.length <= 3 * 10^41<=nums.length<=3∗104
    • 105<=nums[i]<=105-10^5 <= nums[i] <= 10^5−105<=nums[i]<=105

    原题链接:53. 最大子序和

    二、整理思路

    初步看来,题目不难,甚至可以说是简洁。先对题目分析一番。

    首先看关键字:最大和连续子数组

    既然是连续子数组,那么前一个子数组的和必然会影响到下一个元素,因此我们可以考虑使用动态规划算法的思想进行解答。

    /**
     * @param {number[]} nums
     * @return {number}
     */
    var maxSubArray = function (nums) {
        let res = nums[0];
        for(let i=1;i<nums.length;i++){
            //以max替代了if更简洁
            nums[i] += Math.max(nums[i-1],0)
            res = Math.max(res,nums[i])
        }
        return res
    };
    

    在这道题中,最难的一部分应该就是对转移方程的定义,借用leetcode K神的一张图解释就是:

    求解最大子序和应该怎么做??|刷题打卡

    当前一个子数组的和比0还小的时候,那么不是越加越少了吗?这种时候还不如直接用新的元素替代掉,成为一个新的开始。

    当时自己思考的时候,就是这里没有想清楚,一直拿前一个元素和当前元素对比,这样子比较是没有用的,因为其实它前面那一系列元素都会影响到加入当前元素后的和。

    因此要将和进行比较才是正确思路。

    原题题解:53. 最大子序和

    三、总结

    以动态规划思想求解,一般来说最重要的就是理清思路,找到题目对应的转移方程,然后根据转移方程进行编程求解。

    如果遇到前面的元素会影响到后面元素抉择的场景,就应该立刻想到动态规划的思想,这样更有效率。

    一起加油吧!

    本文正在参与「掘金 2021 春招闯关活动」, 点击查看 活动详情


    起源地下载网 » 求解最大子序和应该怎么做??|刷题打卡

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元