【LeetCode 53】Maximun Subarray(Python)

Find the contiguous subarray within an array (containing at least one number) which has the largest sum.

示例:given the array [-2,1,-3,4,-1,2,1,-5,4],

the contiguous subarray [4,-1,2,1] has the largest sum = 6.

题目分析:找到一组数中连续的几个数所构成的最大和。网上说,这是一个典型的贪心算法的例子,因为我不太了解这个例子,所以,找了个讲解,在下面。

补充:当我在网上查找关于贪心算法的讲解时,还发现了另一种方法叫动态规划法。这两种方法差不多,目前来看都可以为这道题提供解题思路。     动态规划:点击打开链接      贪心算法:点击打开链接      贪心算法与动态规划的区别:点击打开链接

方法一:

  1. 思路:根据‘动态规划’和‘贪心算法’可以得出,解决此类问题的关键在于设置一个变量存放以当前元素为最长子数组的最后一个元素。用所能达到的最大和,以及之前所达到的最大和进行对比(这里是用到动态规划,需要理解与贪心算法的区别。动态规划可以保存之前的最大值
  1. 思路:以下所写都是我在做题过程中想到的方法。首先判断正负,用第一个数和第二个数比较,如果第一个数>=第二个数,则两数相加,将得到的和存在一个变量中,与下一个数作比较。否则,从第二个数开始。   用到递归调用。
  2. 代码:
    class Solution(object):
        def maxSubArray(self, nums):
            if len(nums) == 0:
                return 0
            curr_sum = nums[0]
            max_sum = nums[0]
            for i in range(1, len(nums)):
                curr_sum = max(nums[i], curr_sum + nums[i])
                max_sum = max(max_sum, curr_sum)
            return max_sum

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值