#2547

Minimum Cost to Split an Array

Hard
ArrayHash TableDynamic ProgrammingCountingHash MapDynamic ProgrammingArray
LeetCode ↗

Approaches

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

Intuition

Time O(n²)Space O(n)

The optimal solution uses dynamic programming to build up the minimum cost for each subarray. By storing previously computed results, we avoid redundant calculations, significantly improving efficiency.

⚙️

Algorithm

4 steps
  1. 1Step 1: Initialize a dp array where dp[i] represents the minimum cost to partition the first i elements.
  2. 2Step 2: Iterate through the array and for each end index, calculate the importance of all possible subarrays ending at that index.
  3. 3Step 3: Update the dp array based on the minimum cost found for each subarray.
  4. 4Step 4: Return dp[n] as the final answer.
solution.py16 lines
1def minCost(nums, k):
2    n = len(nums)
3    dp = [float('inf')] * (n + 1)
4    dp[0] = 0
5    for r in range(1, n + 1):
6        count = {}
7        trimmed_length = 0
8        for l in range(r - 1, -1, -1):
9            count[nums[l]] = count.get(nums[l], 0) + 1
10            if count[nums[l]] == 2:
11                trimmed_length += 2
12            elif count[nums[l]] > 2:
13                trimmed_length += 1
14            importance = k + trimmed_length
15            dp[r] = min(dp[r], dp[l] + importance)
16    return dp[n]

Complexity note: The time complexity is O(n²) due to the nested loop for calculating importance values, while the space complexity is O(n) for storing the dp array.

  • 1Understanding the importance calculation is crucial for optimizing the solution.
  • 2Dynamic programming can significantly reduce the number of redundant calculations.

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