Leetcode53.最大子序和(python3)
2019-01-31 09:51
435 查看
Leetcode53.最大子序和
题目描述:
给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。
实例:
输入: [-2,1,-3,4,-1,2,1,-5,4],
输出: 6
解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。
解法1:(python)
class Solution(object): def maxSubArray(self, nums): sum=0 real_max_sum=nums[0] for num in nums: sum+=num if sum>real_max_sum: real_max_sum=sum if sum<0: sum=0 return real_max_sum
解法1的另一种表达:(python)
class Solution: def maxSubArray(self, nums): """ :type nums: List[int] :rtype: int """ res = 0 max0 = nums[0] for i in nums: res = max(i,res+i) max0 = max(res,max0) if res < 0: res = 0 return max0
解法2:分治法(python)
class Solution: def maxSubArray(self, nums): """ :type nums: List[int] :rtype: int """ left = 0 right = len(nums)-1 maxSum = self.divide(nums,left,right) return maxSum def divide(self,nums,left,right): if left==right: return nums[left] center = (left+right)//2 leftMaxSum = self.divide(nums,left,center) rightMaxSum = self.divide(nums,center+1,right) leftBorderSum = nums[center] leftSum = nums[center] for i in range(center-1,left-1,-1): leftSum += nums[i] if leftSum>leftBorderSum: leftBorderSum = leftSum rightBorderSum = nums[center+1] rightSum = nums[center+1] for i in range(center+2,right+1): rightSum += nums[i] if rightSum>rightBorderSum: rightBorderSum = rightSum BorderSum = leftBorderSum + rightBorderSum return max(leftMaxSum,rightMaxSum,BorderSum)
相关文章推荐
- leetcode的python实现 刷题笔记53:最大子序和(多种解法)
- Leetcode(53) 最大子序和
- LeetCode - 53. 最大子序和
- LeetCode53.python实现: 最大子序和问题☆
- Leetcode 53:最大子序和(Maximum Subarray)
- Leetcode 053 最大子序和 python 分治+动态规划
- LeetCode 53 最大自序和 Python
- LeetCode53最大子序和
- LeetCode题库解答与分析——#53.最大子序和MaximumSubarray
- Leetcode 53. 最大子序和
- leetcode 53.最大自子序和
- leetcode 53 Maximum Subarray (求最大子数组的和)
- leetcode_[python/C++] 179. Largest Number(数字组合成最大数)
- LeetCode-初级=动态规划-最大子序和
- LeetCode--Maximum Depth of Binary Tree (检索二叉树的最大深度)Python
- leetcode53最大连续数和
- LeetCode--Largest Number(最大数字)Python
- LeetCode-53-Maximum Subarray(最大和子串)
- 求最大子序列和 LeetCode 53 Maximum Subarray
- LeetCode215. python实现:数组中的第K个最大元素问题☆☆