lintcode41 最大子数组

我的代码

    def maxSubArray(self, nums):
        total = 0
        i = 0
        maxnum = float('-inf')
        for i in range(len(nums)):
            if total + nums[i] < 0:
                total = nums[i]
            else:
                total += nums[i]
            if total > maxnum:
                maxnum = total
        return maxnum

正确代码

  def maxSubArray(self, nums):
        total = 0
        i = 0
        maxnum = float('-inf')
        for i in range(len(nums)):
            if total < 0:
                total = nums[i]
            else:
                total += nums[i]
            if total > maxnum:
                maxnum = total
        return maxnum

真所谓失之毫厘 谬以千里。虽然我和正确代码之前的差距只是在第一个if判断的时候有没有加上本轮的值nums[i],但是里面所体现的思想却是大不相同的。

我在if判断中加上用total + nums[i]再判断是否小于0所体现的思想是每次都判断本轮相加的和是否小于0,如果小于0就把本轮的值赋给total,但其实应该是把下一轮未知的值nums[i+1]赋给total用于判断才对,可这样却又会对for循环不友好(i不好更改)

最后看了一下正确代码,它在if判断的时候并没有加本轮的值,那么total代表的是之前轮的总和,之前轮的总和小于0 直接给total赋值新的本轮值nums[i]即可,无需再对i进行更改~

这一点小小的思想 希望自己能够多体会感受一下。

猜你喜欢

转载自blog.csdn.net/Sallywa/article/details/89408182
今日推荐