Split the array into exactly two subarrays, left and right, such that left is strictly increasing and right is strictly decreasing.
Return the minimum possible absolute difference between the sums of left and right. If no valid split exists, return -1.
Example 1:
Input:nums = [1,3,2]
Output:2
Explanation:
i
left
right
Validity
left sum
right sum
Absolute difference
0
[1]
[3, 2]
Yes
1
5
|1 - 5| = 4
1
[1, 3]
[2]
Yes
4
2
|4 - 2| = 2
Thus, the minimum absolute difference is 2.
Example 2:
Input:nums = [1,2,4,3]
Output:4
Explanation:
i
left
right
Validity
left sum
right sum
Absolute difference
0
[1]
[2, 4, 3]
No
1
9
-
1
[1, 2]
[4, 3]
Yes
3
7
|3 - 7| = 4
2
[1, 2, 4]
[3]
Yes
7
3
|7 - 3| = 4
Thus, the minimum absolute difference is 4.
Example 3:
Input:nums = [3,1,2]
Output:-1
Explanation:
No valid split exists, so the answer is -1.
Constraints:
2 <= nums.length <= 105
1 <= nums[i] <= 105
Solutions
Solution 1: Prefix Sum + Two Arrays to Record Monotonicity
We use a prefix sum array \(s\) to record the prefix sum of the array, where \(s[i]\) represents the sum of the array \([0,..i]\). Then we use two boolean arrays \(f\) and \(g\) to record the monotonicity of prefixes and suffixes respectively, where \(f[i]\) indicates whether the array \([0,..i]\) is strictly increasing, and \(g[i]\) indicates whether the array \([i,..n-1]\) is strictly decreasing.
Finally, we traverse array positions \(i\) where \(0 \leq i < n-1\). If both \(f[i]\) and \(g[i+1]\) are true, then we can calculate the sums of \(left\) and \(right\), which are \(s[i]\) and \(s[n-1]-s[i]\) respectively, and update the answer.
The time complexity is \(O(n)\) and the space complexity is \(O(n)\), where \(n\) is the length of the array.