1849 Maximum Absolute Sum Of Any Subarray
1849 Maximum Absolute Sum Of Any Subarray
Maximum Absolute Sum of Any Subarray 
You are given an integer array nums. The absolute sum of a subarray [numsl, numsl+1, …, numsr-1, numsr] is abs(numsl + numsl+1 + … + numsr-1 + numsr).
Return *the maximum absolute sum of any (possibly empty) subarray of *nums.
Note that abs(x) is defined as follows:
1
2
If x is a negative integer, then abs(x) = -x.
If x is a non-negative integer, then abs(x) = x.
Example 1:
1
2
3
4
5
**Input:** nums = [1,-3,2,3,-4]
**Output:** 5
**Explanation:** The subarray [2,3] has absolute sum = abs(2+3) = abs(5) = 5.
Example 2:
1
2
3
4
5
**Input:** nums = [2,-5,1,-4,3,-2]
**Output:** 8
**Explanation:** The subarray [-5,1,-4] has absolute sum = abs(-5+1-4) = abs(-8) = 8.
Constraints:
1
2
1 <= nums.length <= 105
-104 <= nums[i] <= 104
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
28
29
30
31
32
33
34
35
36
37
38
class Solution:
def maxAbsoluteSum(self, nums: List[int]) -> int:
# idea is that every time a +ve appears
# i include it in sum
# but if a negative appears , sum until previous number was better
# I start fresh ,-> no abs sum can have negative
# prefix sum , take non absolute sums till index i
# and then find index j at max distt from it and find absolute.
# 2,-3,-2,-6,-3,-5
#
pref_sum = []
temp = 0
for k in nums:
temp += k
pref_sum.append(temp)
max_arr = []
min_arr =[]
ma = -100000
mi = 100000
for i, k in enumerate(pref_sum):
ma = max(ma, k)
mi = min(mi, k)
max_arr.append(ma)
min_arr.append(mi)
#print(pref_sum, max_arr, min_arr)
res = 0
for i, k in enumerate(pref_sum):
res = max(res, abs(k - max_arr[i]) , abs(k - min_arr[i]), abs(k))
return res
This post is licensed under CC BY 4.0 by the author.