Leetcode!
  • LeetCode!
  • My personal guide to Leetcode
  • Array
    • 11. Container With Most Water
    • 15. 3Sum
    • 219. Contains Duplicate II
    • 238. Product of Array Except Self
    • 245. Shortest Word Distance III
    • 392. Is Subsequence
    • 442. Find All Duplicates in an Array
    • 561. Array Partition I
    • 661. Image Smoother
    • 697. Degree of an Array
    • 723. Candy Crush
    • 832. Flipping an Image
  • Backtracking
    • 294. Flip Game II
    • 401. Binary Watch
    • 1079. Letter Tile Possibilities
  • Binary Search
    • 744. Find Smallest Letter Greater Than Target
    • 852. Peak Index in a Mountain Array
  • String
    • 6. ZigZag Conversion
    • 17. Letter Combinations of a Phone Number
    • 38. Count and Say
    • 521. Longest Uncommon Subsequence I
    • 544. Output Contest Matches
    • 937. Reorder Data in Log Files
  • Design
    • 251. Flatten 2D Vector
    • 281. Zigzag Iterator
  • Hash Table
    • 1. Two Sum
    • 508. Most Frequent Subtree Sum
    • 884. Uncommon Words from Two Sentences
    • 734. Sentence Similarity
  • Linked List
    • 2. Add Two Numbers
  • Unsorted
    • 917. Reverse Only Letters
  • Math
    • 43. Multiply Strings
    • 462. Minimum Moves to Equal Array Elements II
    • 553. Optimal Division
    • 800. Similar RGB Color
  • Greedy
    • 406. Queue Reconstruction by Height
    • 861. Score After Flipping Matrix
  • Tree
    • 701. Insert into a Binary Search Tree
    • 897. Increasing Order Search Tree
  • Divide and Conquer
    • 53. Maximum Subarray
  • Dynamic Programming
    • 62. Unique Paths
    • 63. Unique Paths II
    • 64. Minimum Path Sum
    • 120. Triangle
    • 198. House Robber
    • 213. House Robber II
    • 303. Range Sum Query - Immutable
    • 518. Coin Change 2
    • 750. Number Of Corner Rectangles
    • 337. House Robber III
  • Depth first search
    • 841. Keys and Rooms
  • Trie
    • 677. Map Sum Pairs
  • Two pointer
    • 42. Trapping Rain Water
Powered by GitBook
On this page
  • Approach 1: Brute Force
  • Approach 2: Sorting
  1. Array

561. Array Partition I

The problem requires us to maximize the sum of pair-wise minimums

Approach 1: Brute Force

The ugliest solution to the problem is by brute-forcing each and every combination for all the values of the array. This will involve generating all permutations of the given array and then splitting them pairwise and returning the corresponding minimum

Time Complexity: O(n!) (There can be a total of n! permutations)

Space Complexity: O(1) (Since we do not need to store all the permutations)

Given that the size of the array could be up to 20000, this solution was bound to fail and giving it a try would be a waste of time.

Approach 2: Sorting

The easier and faster solution to the problem is by first sorting the given array in ascending order, then grouping the numbers into pairs in sequential order and summing up the minimum of all the pairs (i.e. sum up every alternate number since the array is already sorted in ascending order)

array-partition-i
def arrayPairSum(self, nums):     
    """     
    https://leetcode.com/problems/array-partition-i/description/
    :type nums: List[int]     
    :rtype: int     
    """     
    nums.sort()    
    sum = 0
    for i in range(0,len(nums),2):
        sum += nums[i]
        return sum

Time complexity: O(nlog(n)) (Sorting takes O(nlog(n)) time)

Space complexity: O(1) (Sorting is done in place so no extra memory is needed)

Some minor code improvements would be to replace the for loop with a list comprehension sum instead i.e. return sum(nums[::2]) which does not change the logic but makes it more concise

Previous442. Find All Duplicates in an ArrayNext661. Image Smoother

Last updated 6 years ago