【LeetCode解题报告】53. Maximum Subarray

本文介绍了一种解决LeetCode上最大子数组和问题的方法,该问题要求在给定数组中找出连续子数组的最大和。文章提供了一段Python代码实现,并采用动态规划思想,确保时间复杂度为O(n)。

题目来源:https://leetcode.com/problems/maximum-subarray/description/ 

题目:Given an integer array nums, find the contiguous subarray (containing at least one number) which has the largest sum and return its sum.

Example:

Input: [-2,1,-3,4,-1,2,1,-5,4],
Output: 6
Explanation: [4,-1,2,1] has the largest sum = 6.

Follow up:

If you have figured out the O(n) solution, try coding another solution using the divide and conquer approach, which is more subtle.


题意分析:
    在给定数组中找到连续的子数组(包含至少一个数字),它的和是所有子数组中最大的。
     例如,给定的数组[−2, 1, −3, 4, −1, 2, 1, −5, 4],
     其中子数组[4, −1, 2, 1] 有最大的和6。

思路分析

    首先假定数组中第一个数的值为所求最大和(max_sum),同时将当前和(now_sum)设为0。

    然后开始遍历整个数组,将当前和加上当前数组中的值,若当前和大于最大和,则将最大和置为当前和。

    若当前和小于0,则重新开始计算当前和,此时需要先将当前和置为0。

    最后返回最大和。

代码:    

class Solution(object):
    def maxSubArray(self, nums):
        """
        :type nums: List[int]
        :rtype: int
        """
        max_sum = nums[0]
        now_sum = 0
		
        for num in nums:
            now_sum += num

            if now_sum > max_sum:
                max_sum = now_sum

            if now_sum < 0:
               now_sum = 0

        return max_sum

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值