서랍장
leetcode 189 본문
Rotate Array, 문제는 정말 간단하다. 그렇지만 시간복잡도를 O(1)으로 풀기 위해서는 약간의 아이디어가 필요한데, 배열의 item 값을 바꿀 때, item을 가르키는 prev을 지정해야하고, cnt로 전체 item을 탐색하고 있는지 추적해야한다. start는 n//k값이다.
class Solution:
def rotate(self, nums: List[int], k: int) -> None:
"""
Do not return anything, modify nums in-place instead.
"""
n = len(nums)
k %= n
# start defines
start = cnt = 0
while cnt < n:
# prev는 바뀌기 이전의 value를 지정
curr, prev = start, nums[start]
while True:
nextIdx = (curr + k) % n
nums[nextIdx], prev = prev, nums[nextIdx]
curr = nextIdx
cnt += 1
if start == curr:
break
start += 1
'algorithm' 카테고리의 다른 글
leetcode 1060, 1901 (0) | 2022.10.26 |
---|---|
leetcode 1662 (0) | 2022.10.25 |
leetcode 1239 (0) | 2022.10.24 |
binary search 이분 탐색 (0) | 2022.10.23 |
백준 solv4(#1504) (0) | 2021.04.03 |
Comments