LeetCode 53 分治算法,求最大子串
2017-03-06 19:05
597 查看
本来想用C++写的,但是写的过程中发现很多语法都记不清了,索性转回python,c++以后再练吧
问题描述:
Find the contiguous subarray within an array (containing at least one number) which has the largest sum.
For example, given the array
the contiguous subarray
解题思路:采取分治的方法,数组分为两部分s1[:len/2],s2[len/2:]
那么只有可能出现一下三种情况:
1、maxsum 在s1中
2、maxsum 在s2中
3、maxsum 跨越s1和s2,那么maxsum(s) = maxsum(s1)+maxsum(s2)
代码:
class Solution(object):
def maxSubArray(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
sum = 0
l = len(nums)
if l == 1:
return nums[0]
left = self.maxSubArray(nums[:l//2])
right = self.maxSubArray(nums[l//2:])
s1 = nums[(l//2)-1]
lsum = 0
for i in nums[:l//2][::-1]:
lsum += i
if lsum > s1:
s1 = lsum
s2 = nums[l//2]
rsum=0
for j in nums[l//2:]:
rsum += j
if rsum > s2:
s2 = rsum
sum = s1+s2
if sum<left:
sum = left
if sum<right:
sum = right
return sum
结果:Accepted
问题描述:
Find the contiguous subarray within an array (containing at least one number) which has the largest sum.
For example, given the array
[-2,1,-3,4,-1,2,1,-5,4],
the contiguous subarray
[4,-1,2,1]has the largest sum =
6.
解题思路:采取分治的方法,数组分为两部分s1[:len/2],s2[len/2:]
那么只有可能出现一下三种情况:
1、maxsum 在s1中
2、maxsum 在s2中
3、maxsum 跨越s1和s2,那么maxsum(s) = maxsum(s1)+maxsum(s2)
代码:
class Solution(object):
def maxSubArray(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
sum = 0
l = len(nums)
if l == 1:
return nums[0]
left = self.maxSubArray(nums[:l//2])
right = self.maxSubArray(nums[l//2:])
s1 = nums[(l//2)-1]
lsum = 0
for i in nums[:l//2][::-1]:
lsum += i
if lsum > s1:
s1 = lsum
s2 = nums[l//2]
rsum=0
for j in nums[l//2:]:
rsum += j
if rsum > s2:
s2 = rsum
sum = s1+s2
if sum<left:
sum = left
if sum<right:
sum = right
return sum
结果:Accepted
相关文章推荐
- Leetcode 53 Maximum Subarray 最大子串和
- LeetCode-53-Maximum Subarray(最大和子串)
- Scala Maximum Subarray 最大子串 leetcode 53
- LeetCode - 53. 最大子序和
- LeetCode-Maximum Subarray-最大子串和-逻辑
- leetcode 53-最大子数组的和
- LeetCode题库解答与分析——#53.最大子序和MaximumSubarray
- 面试题31:连续子数组的最大和(Leetcode-53:Maximum Subarray)
- LeetCode53最大子序和
- Leetcode—最大无重复子串
- #53 Maximum Subarray最大子串和
- LeetCode-Gas Station-加油站-最大子串算法应用
- 【Leetcode】寻找数串中连续最大整数和且最大长度的子串
- leetcode-53 Maximum Subarray 连续子数组的最大和
- Leetcode刷题记——53. Maximum Subarray(最大子串)
- 【Leetcode】寻找数串中连续最大整数和且最大长度的子串
- [leetcode 53] Maximum Subarray----最大子数组的和
- LeetCode-53:Maximum Subarray (和最大的连续子数组)
- LeetCode: -Dynamic Programming-Maximum Subarray[53]-子数组最大和
- [leetcode]53. Maximum Subarray 最大连续子串python实现【medium】