You are given an integer array nums of length n and an integer k.
You must select exactly k distinct non-empty subarrays nums[l..r] of nums. Subarrays may overlap, but the exact same subarray (same l and r) cannot be chosen more than once.
The value of a subarray nums[l..r] is defined as: max(nums[l..r]) - min(nums[l..r]).
The total value is the sum of the values of all chosen subarrays.
Return the maximum possible total value you can achieve.
Example 1:
Input: nums = [1,3,2], k = 2
Output: 4
Explanation:
One optimal approach is:
nums[0..1] = [1, 3]. The maximum is 3 and the minimum is 1, giving a value of 3 - 1 = 2.nums[0..2] = [1, 3, 2]. The maximum is still 3 and the minimum is still 1, so the value is also 3 - 1 = 2.Adding these gives 2 + 2 = 4.
Example 2:
Input: nums = [4,2,5,1], k = 3
Output: 12
Explanation:
One optimal approach is:
nums[0..3] = [4, 2, 5, 1]. The maximum is 5 and the minimum is 1, giving a value of 5 - 1 = 4.nums[1..3] = [2, 5, 1]. The maximum is 5 and the minimum is 1, so the value is also 4.nums[2..3] = [5, 1]. The maximum is 5 and the minimum is 1, so the value is again 4.Adding these gives 4 + 4 + 4 = 12.
Constraints:
1 <= n == nums.length <= 5 * 1040 <= nums[i] <= 1091 <= k <= min(105, n * (n + 1) / 2)Problem Overview: You are given an integer array and must compute the maximum possible total value obtained from subarrays according to the scoring rule defined in the problem. The challenge is efficiently identifying the best subarrays while avoiding overlapping or redundant calculations as the array size grows.
Approach 1: Brute Force Enumeration (O(n^3) time, O(1) space)
Enumerate every possible subarray using two nested loops for the start and end index. For each candidate range, compute its value by scanning the subarray and applying the scoring rule. This approach is useful for verifying correctness on small inputs but becomes impractical quickly because the number of subarrays is O(n²) and computing the value for each can take another O(n). Arrays larger than a few hundred elements will already be too slow.
Approach 2: Prefix Processing with Priority Queue (O(n^2 log n) time, O(n) space)
Precompute helper information such as prefix sums or other range statistics depending on the scoring formula. Instead of recalculating values repeatedly, maintain candidate subarrays and push them into a priority queue ordered by their potential contribution. Each step extracts the best candidate and expands or splits the range to generate new candidates. This reduces redundant computation but still explores many overlapping intervals. The heap improves selection of the next best subarray but the number of generated candidates can still reach O(n²).
Approach 3: Greedy Expansion with Segment Tree + Heap (O(n log n) time, O(n) space)
The optimal strategy treats each index or prefix boundary as a potential start of a high-value subarray. A segment tree stores range statistics (such as maximum prefix contribution or best extension point) so you can query the optimal end index for a given start in O(log n). Each candidate subarray is pushed into a heap (priority queue) ordered by its total value. When the best interval is chosen, the remaining search space is split into smaller intervals and reinserted as new candidates. This greedy best-first search avoids scanning the array repeatedly and guarantees that the highest-value segments are discovered first.
The key insight: instead of evaluating every subarray, treat the search space as ranges and always expand the currently best candidate. Efficient range queries from the array via the segment tree keep candidate generation fast while the heap ensures correct ordering.
Recommended for interviews: Start by explaining the brute force idea to show you understand the subarray search space. Then transition to the optimized greedy strategy using a heap and segment tree. Interviewers expect the O(n log n) solution because it demonstrates knowledge of advanced data structures and how to combine range queries with priority-based exploration.
Solutions for this problem are being prepared.
Try solving it yourself| Approach | Time | Space | When to Use |
|---|---|---|---|
| Brute Force Subarray Enumeration | O(n^3) | O(1) | Understanding the scoring rule or validating logic on very small arrays |
| Prefix Processing + Heap Candidates | O(n^2 log n) | O(n) | When partial range reuse helps but full optimization is not required |
| Greedy with Segment Tree + Priority Queue | O(n log n) | O(n) | General optimal solution for large arrays and interview settings |
3691. Maximum Total Subarray Value II (Leetcode Hard) • Programming Live with Larry • 702 views views
Watch 2 more video solutions →Practice Maximum Total Subarray Value II with our built-in code editor and test cases.
Practice on FleetCodePractice this problem
Open in Editor