3654. Minimum Sum After Divisible Sum Deletions
You are given an integer array nums and an integer k.
You may repeatedly choose any contiguous subarray of nums whose sum is divisible by k and delete it; after each deletion, the remaining elements close the gap.
Return the minimum possible sum of nums after performing any number of such deletions.
Example 1:
Input: nums = [1,1,1], k = 2
Output: 1
Explanation:
- Delete the subarray
nums[0..1] = [1, 1], whose sum is 2 (divisible by 2), leaving[1]. - The remaining sum is 1.
Example 2:
Input: nums = [3,1,4,1,5], k = 3
Output: 5
Explanation:
- First, delete
nums[1..3] = [1, 4, 1], whose sum is 6 (divisible by 3), leaving[3, 5]. - Then, delete
nums[0..0] = [3], whose sum is 3 (divisible by 3), leaving[5]. - The remaining sum is 5.
Constraints:
1 <= nums.length <= 1051 <= nums[i] <= 1061 <= k <= 105
ArrayHash TableDynamic ProgrammingPrefix Sum
Hints
Hint 1
A subarray sum is divisible by
k precisely when the prefix sums at its two endpoints have the same remainder mod k.Hint 2
Define
dp[i] as the minimum total remaining sum after processing the first i elements.Hint 3
Keep a map from each remainder to the best (smallest) value of
dp[j] - prefixSum[j] you've seen for that remainder to update dp[i] in O(1).Hint 4
Maintain a running prefix sum so you never recompute subarray sums from scratch.
Preparing judge…