Welcome to Subscribe On Youtube
Formatted question description: https://leetcode.ca/all/1749.html
1749. Maximum Absolute Sum of Any Subarray
Level
Medium
Description
You are given an integer array nums
. The absolute sum of a subarray [nums_l, nums_{l+1}, ..., nums_{r-1}, nums_r]
is abs(nums_l + nums_{l+1} + ... + nums_{r-1} + nums_r)
.
Return the maximum absolute sum of any (possibly empty) subarray of nums
.
Note that abs(x)
is defined as follows:
- If
x
is a negative integer, thenabs(x) = -x
. - If
x
is a non-negative integer, thenabs(x) = x
.
Example 1:
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:
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 <= nums.length <= 10^5
-10^4 <= nums[i] <= 10^4
Solution
Calculate the maximum subarray sum and the minimum subarray sum of nums
. Then calculate the absolute values of the two sums, and return the maximum value.
-
class Solution { public int maxAbsoluteSum(int[] nums) { int sumMax = nums[0], sumMin = nums[0]; int max = Math.max(sumMax, 0), min = Math.min(sumMin, 0); int length = nums.length; for (int i = 1; i < length; i++) { int num = nums[i]; sumMax = Math.max(sumMax + num, num); sumMin = Math.min(sumMin + num, num); max = Math.max(max, sumMax); min = Math.min(min, sumMin); } return Math.max(Math.abs(max), Math.abs(min)); } } ############ class Solution { public int maxAbsoluteSum(int[] nums) { int f = 0, g = 0; int ans = 0; for (int x : nums) { f = Math.max(f, 0) + x; g = Math.min(g, 0) + x; ans = Math.max(ans, Math.max(f, Math.abs(g))); } return ans; } }
-
// OJ: https://leetcode.com/problems/maximum-absolute-sum-of-any-subarray/ // Time: O(N) // Space: O(1) class Solution { public: int maxAbsoluteSum(vector<int>& A) { int ans = 0, mn = 0, mx = 0, sum = 0; for (int n : A) { sum += n; ans = max({ ans, mx - sum, sum - mn }); mx = max(mx, sum); mn = min(mn, sum); } return ans; } };
-
# 1749. Maximum Absolute Sum of Any Subarray # https://leetcode.com/problems/maximum-absolute-sum-of-any-subarray class Solution: def maxAbsoluteSum(self, nums: List[int]) -> int: mmax = mmin = s = 0 for num in nums: s += num mmax = max(mmax, s) mmin = min(mmin, s) return mmax - mmin
-
func maxAbsoluteSum(nums []int) (ans int) { var f, g int for _, x := range nums { f = max(f, 0) + x g = min(g, 0) + x ans = max(ans, max(f, abs(g))) } return } func abs(x int) int { if x < 0 { return -x } return x } func max(a, b int) int { if a > b { return a } return b } func min(a, b int) int { if a < b { return a } return b }
-
function maxAbsoluteSum(nums: number[]): number { let f = 0; let g = 0; let ans = 0; for (const x of nums) { f = Math.max(f, 0) + x; g = Math.min(g, 0) + x; ans = Math.max(ans, f, -g); } return ans; }
-
impl Solution { pub fn max_absolute_sum(nums: Vec<i32>) -> i32 { let mut f = 0; let mut g = 0; let mut ans = 0; for x in nums { f = i32::max(f, 0) + x; g = i32::min(g, 0) + x; ans = i32::max(ans, f.max(-g)); } ans } }