Python|贪心算法解最大子序和

Posted 算法与编程之美

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python|贪心算法解最大子序和相关的知识,希望对你有一定的参考价值。



1 题目描述

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

示例:

输入: [-2,1,-3,4,-1,2,1,-5,4],

输出: 6

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


2 思路描述

第一时间想到的当然是暴力解决,基本思路就是遍历一遍,用两个变量,一个记录最大的和,一个记录当前的和。后面发现可以用贪心算法来解比较简单其基本思路是正在访问的节点值+此节点之前的最大值如果大于当前节点,则更新最大值为和,否则更新最大值为当前节点。


3 暴力解决的代码

nums=[-2,1,-3,4,-1,2,1,-5,4]
 tmp = nums[0]
 max_ = tmp
 n = len(nums)
 for i in range(1,n):
             # 当当前序列加上此时的元素的值大于tmp的值,说明最大序列和可能出现在后续序列中,记录此时的最大值
     if tmp + nums[i]>nums[i]:
         max_ = max(max_, tmp+nums[i])
         tmp = tmp + nums[i]
     else:
             #tmp(当前和)小于下一个元素时,当前最长序列到此为止。以该元素为起点继续找最大子序列,
             # 并记录此时的最大值
         max_ = max(max_, tmp, tmp+nums[i],  nums[i])
         tmp = nums[i]
 print(max_)

 


4 贪心算法的代码

nums=[-2,1,-3,4,-1,2,1,-5,4]

lenth = len(nums)

         cur_sum=max_sum = nums[0]

         for i in range(1,lenth):

            cur_sum = max(cur_sum+nums[i],  nums[i])

            max_sum = max(cur_sum, max_sum)

print(max_sum)


5 总结

贪心算法的基本思路是从问题的某一个初始解出发一步一步地进行,根据某个优化测度,每一步都要确保能获得局部最优解。每一步只考虑一个数据,选取应该满足局部优化的条件。若下一个数据和部分最优解连在一起不再是可行解时,就不把该数据添加到部分解中,直到把所有数据枚举完,或者不能再添加算法停止。




END


编  辑   |   王楠岚

责  编   |   王自强


 where2go 团队


   

温馨提示:点击页面右下角“写留言”发表评论,期待您的参与!期待您的转发!

以上是关于Python|贪心算法解最大子序和的主要内容,如果未能解决你的问题,请参考以下文章

贪心——力扣53.最大子序和&&力扣122.买卖股票的最佳时机Ⅱ

数据结构Leetcode——贪心算法

LeetCode 53 最大子序和[贪心] HERODING的LeetCode之路

最大子序和

LeetCode 53. 最大子序和

最大子序和