LeetCode53.python实现: 最大子序和问题☆
2019-03-18 15:57
253 查看
一、问题
给定一个整数数组
nums,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
示例:
[code]输入: [-2,1,-3,4,-1,2,1,-5,4], 输出: 6 解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。
进阶:
如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的分治法求解。
二、解题思路
分析:若所有的整数为负数,则最大子序列和为0。
一种算法复杂度比较高的实现方法就是使用贪心算法,遍历所有子序列,得到子序列的最大和。算法复杂度 ,实现过程简单。
另一种算法,算法复杂度 ,该算法基于下面两个事实:
①任何负的 子序列都不可能是最大子序列和 的前缀
②当加上 下标 i 所在的元素,使得 当前序列的和变成负数时,根据①,可以从 j+1 处重新开始计算下一段子序列的和。
因为某段子序列到索引 j 位置时,它们的和是负的,意味着最大子序列不会 包含这一段子序列,那么从 j+1 开始,能不能找到一段更大的子序列。该算法的具体实现如下:
三、python具体实现
[code]class Solution(object): def maxSubArray(self, nums): """ :type nums: List[int] :rtype: int """ result = nums[0] numSum = 0 for i in range(0,len(nums)): if numSum>0: numSum +=nums[i] else: numSum = nums[i] result = max(numSum,result) return result
四、题外记
这类问题,自己还是不熟练,解题目前还不顺,虽然标的简单,但没有接触的话,还是蛮复杂de
相关文章推荐
- leetcode的python实现 刷题笔记53:最大子序和(多种解法)
- leetcode 2. Add Two Numbers python实现的理解,结点,单链表的应用,大数,进位的问题
- 最大子数组问题的python实现
- [leetcode]53. Maximum Subarray 最大连续子串python实现【medium】
- python实现leetcode-第18题-最大公共前缀
- [leetcode]分治法求解最大子序列问题——Java实现
- Python实现求解最大子数组问题
- Leetcode[239]滑动窗口最大值 python实现
- [leetcode]53. Maximum Subarray 最大连续子串python实现【medium】
- 连续子向量的最大和问题(Python实现)
- [151225] Python3 实现最大堆、堆排序,解决TopK问题
- 类动态规划求解较小规模的最大团问题(Python实现)
- leetcode 找到树中距离最大的两个结点,Python实现
- 一个无聊男人的疯狂《数据结构与算法分析-C++描述》学习笔记 用C++/lua/python/bash的四重实现(3) 最大子序列和问题
- Leetcode 053 最大子序和 python 分治+动态规划
- 0-1背包问题+Leetcode[132] python实现
- Python实现最大子树问题
- 计算4000000000内的最大f(n)=n值---字符串的问题python实现(五岁以下儿童)
- leetcode | 最大装水量问题 | python
- 计算4000000000以内最大的f(n)=n的值---字符串问题python实现(五)