3962. Maximum Subarray Sum After at Most K Swaps
SourceWeekly Contest 506 Q4DifficultyHardRating2672
Description
You are given an integer array nums and an integer k.
You are allowed to perform at most k swap operations on the array.
In one swap operation, you may choose any two indices i and j and swap nums[i] and nums[j].
Return an integer denoting the maximum possible subarray sum after performing the swaps.
Example 1:
Input: nums = [1,-1,0,2], k = 1
Output: 3
Explanation:
- We can swap on indices 1 and 3, resulting in the array
[1, 2, 0, -1]. - The subarray
[1, 2]has a sum of 3, which is the maximum possible subarray sum after at mostk = 1 swap.
Example 2:
Input: nums = [4,3,2,4], k = 2
Output: 13
Explanation:
The maximum possible subarray sum after at most k = 2 swaps is the sum of the entire array, which is 13.
Example 3:
Input: nums = [-1,-2], k = 0
Output: -1
Explanation:
k = 0swaps are allowed.- The possible subarrays are
[-1],[-2], and[-1, -2], with sums -1, -2, and -3 respectively. - Among these sums, the maximum is -1.
Constraints:
1 <= nums.length <= 1500-105 <= nums[i] <= 1050 <= k <= nums.length
Solutions
Solution 1
Thinking
At most \(k\) arbitrary swaps means we may replace the smallest entries of some subarray by the largest entries outside it. \(n\le 1500\) lets us enumerate \([l,r]\) and swap up to \(k\) inside-minima with outside-maxima.
For each segment take those two \(k\)-sets, sort, and apply the improving prefix. A heap can maintain them while the right end grows.
This directory has no implemented solution yet; the walkthrough stops at “enumerate a segment plus a top-\(k\) exchange”.
1 | |
1 | |
1 | |
1 | |