[
array
sort
greedy
]
Leetcode 0561 Array Partition I
Problem statement
https://leetcode.com/problems/array-partition-i/
Solution
It happens that we can just sort numbers and choose every odd number. How we can prove that choosing odd will give the best result? We can show that $S_m = (S - S_d)/2$, where $S_m$ is our sum to maximize and $S_d$ is sum of absolute values between numbers in pairs. So, we need to minimize $S_d$, and we can show our example is optimal.
Complexity
Time complexity is O(n log n)
, space complexity is O(n)
if we are not allowed to change data and O(log n)
in opposite case.
Code
class Solution:
def arrayPairSum(self, nums):
return sum(sorted(nums)[::2])