Array Partition
EasyUpdated: Aug 2, 2025
Practice on:
Problem
Given an integer array nums of 2n integers, group these integers into n pairs (a1, b1), (a2, b2), ..., (an, bn) such that the sum of min(ai, bi) for all i is maximized. Return the maximized sum.
Examples
Example 1
Input: nums = [1,4,3,2]
Output: 4
Explanation: All possible pairings (ignoring the ordering of elements) are:
1. (1, 4), (2, 3) -> min(1, 4) + min(2, 3) = 1 + 2 = 3
2. (1, 3), (2, 4) -> min(1, 3) + min(2, 4) = 1 + 2 = 3
3. (1, 2), (3, 4) -> min(1, 2) + min(3, 4) = 1 + 3 = 4
So the maximum possible sum is 4.
Example 2
Input: nums = [6,2,6,5,1,2]
Output: 9
Explanation: The optimal pairing is (2, 1), (2, 5), (6, 6). min(2, 1) + min(2, 5) + min(6, 6) = 1 + 2 + 6 = 9.
Constraints
1 <= n <= 10^4nums.length == 2 * n-10^4 <= nums[i] <= 10^4
Solution
Method 1 – Sorting and Pairing
Intuition
To maximize the sum of the minimums of pairs, we should pair the smallest numbers together. By sorting the array and pairing every two consecutive elements, we ensure that each pair's minimum is as large as possible, maximizing the total sum.
Approach
- Sort the input array
numsin non-decreasing order. - Initialize a variable
ansto store the result. - Iterate through the sorted array, adding every element at even indices (0, 2, 4, ...) to
ans. - Return
ansas the maximized sum.
This works because, after sorting, pairing each number with its immediate next ensures the minimum in each pair is as large as possible.
Code
C++
class Solution {
public:
int arrayPairSum(vector<int>& nums) {
sort(nums.begin(), nums.end());
int ans = 0;
for (int i = 0; i < nums.size(); i += 2) {
ans += nums[i];
}
return ans;
}
};
Java
class Solution {
public int arrayPairSum(int[] nums) {
Arrays.sort(nums);
int ans = 0;
for (int i = 0; i < nums.length; i += 2) {
ans += nums[i];
}
return ans;
}
}
Python
class Solution:
def arrayPairSum(self, nums: list[int]) -> int:
nums.sort()
ans: int = 0
for i in range(0, len(nums), 2):
ans += nums[i]
return ans
Complexity
- ⏰ Time complexity:
O(N log N)(due to sorting) - 🧺 Space complexity:
O(1)(if sorting in-place), otherwiseO(N)depending on the language's sort implementation