美文网首页
最大子数组合

最大子数组合

作者: 小御茶 | 来源:发表于2021-12-23 20:09 被阅读0次

12.23 数据结构 eazy
给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。

子数组 是数组中的一个连续部分。

示例 1:

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

输入:nums = [1]
输出:1

据说是个动态规划的题目,但是目前太菜了,理解不了,题解看了几遍也不能理解,先用一个好理解的方式解题。关键题目本身要求是要连续的子数组,只需要返回最大值就行。因此可以从第一个数开始,逐个相加,用两个变量,一个a保存已发现的最大值,一个b保存当前轮回的最大值,一个轮回结束于当前的值没有贡献后,举个例子只要b还是大于0的,b就是有贡献的,就可以继续加下去,因为你不知道后面还会不会变的更大,并且在这个过程中,每一次的b都需要和已保存的a做对比,已避免错过中途的最大值。关键是当b小于0,也就是没有贡献后,说明上一轮过程中不会再有更大值了,就要从当前的nums[i]开始了

class Solution:
    def maxSubArray(self, nums: List[int]) -> int:
        top_sum = 0
        max_sum = nums[0]
        for i in range(len(nums)):
            if top_sum + nums[i] >= nums[i]:
                top_sum = top_sum + nums[i]
            else:
                top_sum = nums[i]
            if max_sum < top_sum:
                max_sum = top_sum
            
        return max_sum

更优雅一点可以

max(nums[i],top_sum+nums[i])
max(max_sum,top_sum)

相关文章

  • 最大子数组合

    12.23 数据结构 eazy给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个...

  • 动态规划

    求最大子数组,最大子乘积

  • PTA:01-复杂度2 Maximum Subsequence

    思路 1.这个算法是最大子列和的一个改版,需要我们定位最大子列和的第一个和最后一个数。所以相应的我们仍然可以使用在...

  • 古代九的含义

    古人认为,九在阳数(奇数)中最大,有最尊贵之意,而五在阳数中处于居中的位置,有调和之意.这两个数字组合在一...

  • letcode[053] 最大子序和

    题目地址:最大子序和 思路1:自拟思路——暴力穷举法 列出所有可能的子串组合,对子串进行求和,返回求和的最大值总结...

  • 求子集

    利用递归的方法求子集 每层递归是不同的排列组合,因为前面的数已经排列组合过了,每次只需要从下一个数开始组合即可 c...

  • LeetCode-152-乘积最大子数组

    LeetCode-152-乘积最大子数组 152. 乘积最大子数组[https://leetcode-cn.com...

  • 你知道皇帝的龙袍有几条龙纹吗?

    古人认为,九在阳数(奇数)中最大,有最尊贵之意,而五在阳数中处于居中的位置,有调和之意。这两个数字组合在一起...

  • 10《算法入门教程》分治算法之最大子数组问题

    1. 前言 本节内容是分治算法系列之一:最大子数组问题,主要讲解了什么是最大子数组问题,如何利用分治算法解决最大子...

  • 时间长了就生疏的排列组合

    排列数:组合数:全排列:排列是先组合再排列: 最基本的排列组合公式,不能忘在脑后,应该熟稔于心。 排列和组合的区...

网友评论

      本文标题:最大子数组合

      本文链接:https://www.haomeiwen.com/subject/xwhkqrtx.html