• LeetCode 53. 最大子序和


    53. 最大子序和

    Difficulty: 简单

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

    示例:

    输入: [-2,1,-3,4,-1,2,1,-5,4]
    输出: 6
    解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。
    

    进阶:

    如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的分治法求解。

    Solution

    Language: 全部题目

    这道题目也是剑指offer的第31道题,虽然困难程度为简单,但是我觉得并不简单,还是挺经典的一道题,要求复杂度O(n)的解法,暴力解法会通不过。

    class Solution:
        def maxSubArray(self, nums: List[int]) -> int:    
            cur = 0
            res = -float("inf")
            if not nums:
                return res # 如果数组为空,返回一个最小值
            for num in nums:
                if cur <= 0:
                    cur = num # 如果e之前的数组和为负数,那么之前累计的和需要被抛弃
                else:
                    cur += num
                res = max(res, cur)
            return res
    

    时间复杂度过高!不能通过。

    class Solution:
        def maxSubArray(self, nums: List[int]) -> int:
            if not nums: return -2147483648
            
            res = []
            for i in range(len(nums)):
                if nums[i] >= 0:
                    tmp = nums[i]
                    res.append(tmp)
                    for j in range(i+1, len(nums)):
                        tmp += nums[j]
                        if nums[j] >= 0:
                            res.append(tmp)
                    
            return max(res) if res else max(nums)
    
  • 相关阅读:
    Epox 8RDA3G主板奇怪的问题
    Dreamweaver自动生成的垃圾代码
    于今天完成NGW作业
    C#中WebBrowser的使用
    解决FC3下默认浏览器无法出来的问题
    开了几个小时的会……
    HappyEO电子琴
    又一个周末
    FC2/FC3下无法使用Midi设备
    Blog正式易名“小生杂谈”
  • 原文地址:https://www.cnblogs.com/swordspoet/p/14018997.html
Copyright © 2020-2023  润新知