Skip to content

Commit d4c20ea

Browse files
committed
最大子数组差
1 parent a768ae1 commit d4c20ea

File tree

1 file changed

+40
-0
lines changed

1 file changed

+40
-0
lines changed

maximum_subarray_difference.py

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
# -*- coding: utf-8 -*-
2+
3+
class Solution:
4+
"""
5+
@param nums: A list of integers
6+
@return: An integer indicate the value of maximum difference between two
7+
Subarrays
8+
"""
9+
def maxDiffSubArrays(self, nums):
10+
# write your code here
11+
'''
12+
记录从0到i的最大值和从n - 1到i的最小值,计算最大差。
13+
因为比较大的部分可能出现在前半段,也有可能出现在后半段,
14+
所以反转数组再计算一遍。
15+
'''
16+
ret = self._maxDiffSubArrays(nums)
17+
nums.reverse()
18+
return max(ret, self._maxDiffSubArrays(nums))
19+
20+
def _maxDiffSubArrays(self, nums):
21+
left, right = [0] * len(nums), [0] * len(nums)
22+
_sum = 0
23+
max_sum, min_sum = -2147483648, 2147483647
24+
for i in xrange(len(nums)):
25+
_sum += nums[i]
26+
max_sum = max(_sum, max_sum)
27+
if _sum < 0:
28+
_sum = 0
29+
left[i] = max_sum
30+
_sum = 0
31+
for i in xrange(len(nums) - 1, -1, -1):
32+
_sum += nums[i]
33+
min_sum = min(_sum, min_sum)
34+
if _sum > 0:
35+
_sum = 0
36+
right[i] = min_sum
37+
ret = 0
38+
for i in xrange(1, len(nums)):
39+
ret = max(ret, abs(left[i - 1] - right[i]))
40+
return ret

0 commit comments

Comments
 (0)