#3013

Divide an Array Into Subarrays With Minimum Cost II

Hard
ArrayHash TableSliding WindowHeap (Priority Queue)Hash MapArray
LeetCode ↗

Approaches

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

Intuition

Time O(n log n)Space O(n)

The optimal solution uses a dynamic programming approach combined with a max heap to efficiently track the smallest costs while adhering to the distance constraint. This reduces the number of combinations we need to check.

⚙️

Algorithm

3 steps
  1. 1Step 1: Initialize a DP array where dp[j] represents the minimum cost to divide the first i elements into j subarrays.
  2. 2Step 2: Use a max heap to keep track of the smallest costs dynamically as we iterate through the array.
  3. 3Step 3: For each starting index of a subarray, calculate the cost and update the DP array based on previous results and the heap.
solution.py19 lines
1# Full working Python code
2import heapq
3
4def minCost(nums, k, dist):
5    n = len(nums)
6    dp = [float('inf')] * (k + 1)
7    dp[0] = 0
8    for i in range(n):
9        new_dp = dp[:]
10        max_heap = []
11        for j in range(i + 1):
12            if j > 0:
13                heapq.heappush(max_heap, -nums[j - 1])
14            while max_heap and j - i > dist:
15                heapq.heappop(max_heap)
16            if len(max_heap) >= k - 1:
17                new_dp[k] = min(new_dp[k], dp[k - 1] - max_heap[0] + nums[i])
18        dp = new_dp
19    return dp[k]

Complexity note: The time complexity is reduced to O(n log n) due to the use of a max heap for maintaining the smallest costs dynamically, allowing us to efficiently update our DP array.

  • 1Understanding the cost structure is crucial; it always depends on the first element of each subarray.
  • 2The distance constraint limits the possible combinations, which can be leveraged to optimize the solution.

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