# Time: O(r), r is the range size of the integers # Space: O(r) 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)])