#3698

Split Array With Minimum Difference

Medium
ArrayPrefix SumPrefix SumTwo Pointers
LeetCode ↗

Approaches

Brute ForceOptimal
Complexity Comparison
Brute ForceOptimal Solution
Time
O(n²)
O(n)
Space
O(1)
O(n)
💡

Intuition

Time O(n)Space O(n)

Use prefix and suffix arrays to track increasing and decreasing sequences, allowing efficient validation of splits.

⚙️

Algorithm

3 steps
  1. 1Step 1: Create a boolean array 'inc' to track if nums[0..i] is strictly increasing.
  2. 2Step 2: Create a boolean array 'dec' to track if nums[i..n-1] is strictly decreasing.
  3. 3Step 3: Iterate through split points, calculate sums, and find the minimum absolute difference for valid splits.
solution.py16 lines
1def minAbsDifference(nums):
2    n = len(nums)
3    inc = [True] * n
4    dec = [True] * n
5    for i in range(1, n):
6        inc[i] = inc[i-1] and nums[i] > nums[i-1]
7    for i in range(n-2, -1, -1):
8        dec[i] = dec[i+1] and nums[i] > nums[i+1]
9    min_diff = float('inf')
10    left_sum = 0
11    for i in range(n - 1):
12        left_sum += nums[i]
13        if inc[i] and dec[i + 1]:
14            right_sum = sum(nums[i + 1:])
15            min_diff = min(min_diff, abs(left_sum - right_sum))
16    return min_diff if min_diff != float('inf') else -1

Complexity note: The optimal solution runs in linear time due to the single pass for prefix and suffix arrays, making it efficient.

  • 1Strictly increasing and decreasing conditions are crucial.
  • 2Using prefix and suffix arrays allows efficient validation.

Solutions and explanations are original Tejav content. Problem titles © LeetCode — use the LeetCode button above for the full problem statement.