Skip to content

Commit 6244954

Browse files
committed
最大子数组 II
1 parent eae7c58 commit 6244954

File tree

1 file changed

+32
-0
lines changed

1 file changed

+32
-0
lines changed

maximum_subarray_ii.py

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
# -*- coding: utf-8 -*-
2+
3+
class Solution:
4+
"""
5+
@param nums: A list of integers
6+
@return: An integer denotes the sum of max two non-overlapping subarrays
7+
"""
8+
def maxTwoSubArrays(self, nums):
9+
# write your code here
10+
if not nums:
11+
return 0
12+
nums_len = len(nums)
13+
# 从左边开始到当前位置的连续最大和
14+
max_sums_from_left = [0] * nums_len
15+
# 从右边开始到当前位置的连续最大和
16+
max_sums_from_right = [0] * nums_len
17+
_sum, _min, _max = 0, 0, nums[0]
18+
for i in xrange(nums_len):
19+
_sum += nums[i]
20+
_max = max(_max, _sum - _min) # - _min很重要!!!
21+
_min = min(_min, _sum)
22+
max_sums_from_left[i] = _max
23+
_sum, _min, _max = 0, 0, nums[-1] # _max取右边第一个元素
24+
for i in xrange(nums_len - 1, -1, -1):
25+
_sum += nums[i]
26+
_max = max(_max, _sum - _min)
27+
_min = min(_min, _sum)
28+
max_sums_from_right[i] = _max
29+
_max = max_sums_from_left[0] + max_sums_from_right[-1]
30+
for i in xrange(nums_len - 1):
31+
_max = max(_max, max_sums_from_left[i] + max_sums_from_right[i + 1])
32+
return _max

0 commit comments

Comments
 (0)