-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmaxSubArrayDiff.py
More file actions
27 lines (24 loc) · 915 Bytes
/
Copy pathmaxSubArrayDiff.py
File metadata and controls
27 lines (24 loc) · 915 Bytes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
def maxSubDifference(nums):
#the two subarrays must be adjacent because
#one of the subarrays can always include
#the number in between.
maxDiff = 0
maxL = [0] * len(nums)
minL = [0] * len(nums)
maxR = [0] * len(nums)
minR = [0] * len(nums)
#max and min subarray from left to right
maxL[0], minL[0] = nums[0], nums[0]
#max and min subarray from right to left
maxR[-1], minR[-1] = nums[-1], nums[-1]
for i in range(1, len(nums)):
maxL[i] = max(maxL[i-1] + nums[i], nums[i])
minL[i] = min(minL[i-1] + nums[i], nums[i])
for i in range(len(nums) - 2, -1, -1):
maxR[i] = max(maxR[i+1] + nums[i], nums[i])
minR[i] = min(minR[i+1] + nums[i], nums[i])
for i in range(len(nums) - 1):
maxDiff = max(maxDiff, abs(maxL[i]-minR[i+1]),
abs(maxR[i+1]-minL[i]))
return maxDiff
print maxSubDifference([1,2,-3,1])