알고리즘
[LeetCode] 977. Squares of a Sorted Array
유병각
2022. 4. 24. 16:25
977. Squares of a Sorted Array 투포인터
풀이_#1
투포인터 활용 / 시간복잡도 O(N) 공간복잡도 O(1) (리턴값을 위한 리스트는 공간복잡도 계산에 포함되지 않음)
class Solution(object):
def sortedSquares(self, nums):
"""
:type nums: List[int]
:rtype: List[int]
"""
n = len(nums)
low = 0
high = n - 1
writeIdx = n - 1
r = [0] * n
while(writeIdx >= 0):
left = nums[low] ** 2
right = nums[high] ** 2
if (left <= right):
r[writeIdx] = right
high -= 1
else:
r[writeIdx] = left
low += 1
writeIdx -= 1
return r
풀이_#2
deque 를 활용한 투포인터 활용
Time O(N) , Space O(N)
우아하고 직관적이며 유지보수가 쉬운 코드
from collections import deque
class Solution(object):
def sortedSquares(self, nums):
"""
:type nums: List[int]
:rtype: List[int]
"""
n = len(nums)
r = [0] * n
queue = deque(nums)
writeIdx = n - 1
while (queue):
# deque 는 stack + queue 이기때문에 어쩃든 인덱스로 접근가능하다.
head = queue[0] ** 2
tail = queue[-1] ** 2
if (head <= tail):
r[writeIdx] = tail
queue.pop()
else:
r[writeIdx] = head
queue.popleft()
writeIdx -= 1
return r