# Time: O(r), r is the range size of the integers # Space: O(r) # Given an array of 2n integers, your task is to group these integers into n pairs of integer, # say (a1, b1), (a2, b2), ..., (an, bn) which makes sum of min(ai, bi) for all i from 1 to n as large as possible. # # Example 1: # Input: [1,4,3,2] # # Output: 4 # Explanation: n is 2, and the maximum sum of pairs is 4. # Note: # n is a positive integer, which is in the range of [1, 10000]. # All the integers in the array will be in the range of [-10000, 10000]. try: xrange # Python 2 except NameError: xrange = range # Python 3 class Solution(object): def arrayPairSum(self, nums): """ :type nums: List[int] :rtype: int """ LEFT, RIGHT = -10000, 10000 lookup = [0] * (RIGHT-LEFT+1) for num in nums: lookup[num-LEFT] += 1 r, result = 0, 0 for i in xrange(LEFT, RIGHT+1): result += (lookup[i-LEFT] + 1 - r) / 2 * i r = (lookup[i-LEFT] + r) % 2 return result # Time: O(nlogn) # Space: O(1) class Solution2(object): def arrayPairSum(self, nums): """ :type nums: List[int] :rtype: int """ nums.sort() result = 0 for i in xrange(0, len(nums), 2): result += nums[i] return result # Time: O(nlogn) # Space: O(n) class Solution3(object): def arrayPairSum(self, nums): """ :type nums: List[int] :rtype: int """ nums = sorted(nums) return sum([nums[i] for i in range(0, len(nums), 2)])