3428. Maximum and Minimum Sums of at Most Size K Subsequences - Detailed Explanation
Problem Statement
You’re given an integer array nums and an integer k. A subsequence of nums is any sequence you can form by deleting zero or more elements without changing the relative order of the remaining elements. You want two values:
- The maximum sum obtainable by any subsequence of size at most
k. - The minimum sum obtainable by any subsequence of size at most
k.
Return an array [maxSum, minSum] containing these two values.
Examples
Example 1
Input: nums = [3, -1, 4, -2, 5], k = 3
Output: [12, -3]
Explanation:
For maxSum, pick the three largest positives [5,4,3] → sum = 12
For minSum, pick the two most negative [-2,-1] (you could pick up to 3 but adding 3rd positive would increase sum) → sum = -3
Example 2
Input: nums = [-5, -2, -3, -4], k = 2
Output: [-7, -9]
Explanation:
For maxSum, pick at most 2 elements: two “largest” negatives are [-2,-3] → sum = -5? Actually we can pick zero to get 0 which is larger than any negative, so maxSum = 0.
For minSum, pick the two smallest [-5,-4] → sum = -9
Example 3
Input: nums = [1,2,3], k = 5
Output: [6, 0]
Explanation:
You can pick all three positives for maxSum → 6
For minSum, best is to pick no elements (sum = 0) rather than any positive
Constraints
1 ≤ nums.length ≤ 10⁵-10⁹ ≤ nums[i] ≤ 10⁹1 ≤ k ≤ nums.length
Hints
- Since a subsequence may skip elements arbitrarily, ordering doesn’t matter—only the values.
- To maximize a sum with up to
kelements, you only ever want to pick the largest positive values (or pick none if all are non‑positive). - To minimize a sum with up to
kelements, you only ever want to pick the smallest negative values (or pick none if all are non‑negative). - Sorting the array (or using selection algorithms/heaps to find the top‑k) lets you compute both answers in O(n log n) or O(n + k log n).
Approach
1. Sort and Greedy Pick
- Sort
numsin descending order. - MaxSum:
- Initialize
maxSum = 0,count = 0. - Iterate from the largest down, adding
nums[i]tomaxSumif it’s positive andcount < k. - Stop early if you hit zero or negative or have picked k elements.
- Initialize
- MinSum:
- Initialize
minSum = 0,count = 0. - Iterate from the smallest up (i.e. sort in ascending or traverse the end of descending), adding
nums[i]tominSumif it’s negative andcount < k. - Stop when you hit zero or positive or have picked k elements.
- Initialize
- Return
[maxSum, minSum].
2. Selection via Heaps (O(n + k log n))
- Maintain a max‑heap of all negative numbers (to pick the
ksmallest). - Maintain a min‑heap of all positive numbers (to pick the
klargest). - Pop up to
ktimes from each heap, summing as appropriate; skip popping if the top worsens the objective (e.g. don’t pop a positive when minimizing).
Step‑by‑Step Walkthrough (Example 1)
nums = [3, -1, 4, -2, 5], k = 3
Sorted descending → [5,4,3,-1,-2]
Compute maxSum:
pick 5 → maxSum=5, cnt=1
pick 4 → maxSum=9, cnt=2
pick 3 → maxSum=12, cnt=3 → reached k, stop
Compute minSum:
traverse from the back of sorted descending (i.e. ascending): [-2,-1,3,4,5]
pick -2 → minSum=-2, cnt=1
pick -1 → minSum=-3, cnt=2
cnt=2<k=3 but next is +3, stop (adding makes sum larger)
Result → [12, -3]
Complexity Analysis
- Time:
- Sorting takes O(n log n).
- One linear pass to accumulate picks.
- Overall: O(n log n).
- Space: O(1) extra beyond the input (or O(n) if your sort isn’t in‑place).
Python Code
Python3
Python3
. . . .
Java Code
Java
Java
. . . .
Edge Cases
- All non‑positives: MaxSum should be 0 (pick none).
- All non‑negatives: MinSum should be 0 (pick none).
- k larger than count of beneficial elements: stop early without filling to k.
- Duplicates and zeros: zeros don’t change the sum—can pick or skip arbitrarily.
Common Mistakes
- Forgetting you can pick fewer than
k. Always allow “stop early” when the next candidate hurts your objective. - Trying to pick exactly
kelements even when some have the wrong sign. - Mixing up ascending vs. descending order when computing min and max sums.
Alternative Variations
- Exact‑k subsequence sum: require you pick exactly
k, even if some reduce the objective. - Contiguous subarray version: find maximum/minimum sums of any subarray (not subsequence) up to length k—solved by sliding‑window or deque techniques.
Related Problems
TAGS
leetcode
CONTRIBUTOR
Design Gurus Team
-
GET YOUR FREE
Coding Questions Catalog
Boost your coding skills with our essential coding questions catalog.
Take a step towards a better tech career now!
Explore Answers
66. Plus One - Detailed Explanation
Learn to solve Leetcode 66. Plus One with multiple approaches.
198. House Robber - Detailed Explanation
Learn to solve Leetcode 198. House Robber with multiple approaches.
787. Cheapest Flights Within K Stops - Detailed Explanation
Learn to solve Leetcode 787. Cheapest Flights Within K Stops with multiple approaches.
296. Best Meeting Point - Detailed Explanation
Learn to solve Leetcode 296. Best Meeting Point with multiple approaches.
509. Fibonacci Number - Detailed Explanation
Learn to solve Leetcode 509. Fibonacci Number with multiple approaches.
438. Find All Anagrams in a String - Detailed Explanation
Learn to solve Leetcode 438. Find All Anagrams in a String with multiple approaches.
Related Courses
Grokking the Coding Interview: Patterns for Coding Questions
Grokking the Coding Interview Patterns in Java, Python, JS, C++, C#, and Go. The most comprehensive course with 476 Lessons.
4.6
$197

Grokking Modern AI Fundamentals
Master the fundamentals of AI today to lead the tech revolution of tomorrow.
3.9
$78
Grokking Data Structures & Algorithms for Coding Interviews
Unlock Coding Interview Success: Dive Deep into Data Structures and Algorithms.
4
$78
One-Stop Portal For Tech Interviews.
Copyright © 2025 Design Gurus, LLC. All rights reserved.