Algorithm/python tip

561. Array Partition I

개구리는 개꿀개꿀 2021. 2. 26. 23:09

leetcode.com/problems/array-partition-i/

 

'''
2개씩 묶었을때 각 pair의 min의 합이 최대가 되도록 했을때 값을 구하라
solution)
    sorting -> 순서대로 묶는다
    각 pair의 min이 선택값이기 때문에 최대한 큰 값에 영향을 덜주도록 그루핑을 해야한다.

'''
class Solution(object):
    def arrayPairSum(self, nums):
        ans=0
        nums.sort()
        for i in range(0, len(nums), 2):
            if(nums[i] < nums[i+1]):
                ans += nums[i]
            else:
                ans += nums[i+1]
        
        return ans
        
        """
        :type nums: List[int]
        :rtype: int
        """

better answer:

- 어차피 정렬되어있기 때문에 크기 비교는 할 필요가 없다.

class Solution:
    def arrayPairSum(self, nums: List[int]) -> int:
        nums.sort()
        sum_ = 0
        for i in range(0,len(nums),2):
            sum_ += nums[i]
        return sum_

# Time : 356 ms
# Memory : 16.7 M

best answer:

- use this syntax (L[start:stop:step])

- stackoverflow.com/questions/2990121/how-do-i-loop-through-a-list-by-twos

class Solution:
    def arrayPairSum(self, nums: List[int]) -> int:
        return sum(sorted(nums)[::2])
        
# Time : 332 ms
# Memory : 16.5 M