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