Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |
Tags
- python sorted
- 파이썬 알고리즘
- 파이썬알고리즘
- 잇츠디모
- python zip_longest
- 파이썬 프로그래머스
- 릿코드풀기
- 파이썬릿코드풀기
- 릿코드 파이썬
- python Leetcode
- leetcode 풀기
- 알고리즘풀기
- binary search
- 파이썬릿코드
- LeetCode
- leetcode풀이
- 릿코드풀이
- python 릿코드
- 상가수익률계산기
- 알고리즘풀이
- 파이썬 릿코드
- python xor
- 릿코드 풀기
- python 알고리즘
- leetcode풀기
- 파이썬 알고리즘 풀기
- 파이썬알고리즘풀기
- 릿코드
- python priority queue
- 코틀린기초
Archives
- Today
- Total
소프트웨어에 대한 모든 것
LeetCode 풀기 - 189. Rotate Array 본문
반응형
189. Rotate Array
https://leetcode.com/problems/rotate-array/
Rotate Array - LeetCode
Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.
leetcode.com
문제)
솔루션1)
공간복잡도를 O(N)으로 생각하면 굉장히 심플한 문제이다.
1) 임시 배열 생성
2) nums에서 k만큼 이동한 index에 값을 임시 배열에 넣는다
3) 임시 배열의 값을 nums에 복사
class Solution:
def rotate(self, nums: List[int], k: int) -> None:
# 시간복잡도 : O(N)
# 공간복잡도 : O(N)
temps = [0] * len(nums)
for i, n in enumerate(nums):
temps[(i+k)%len(nums)] = n
for i, n in enumerate(temps):
nums[i] = n
솔루션2)
여기에서 원하는 솔루션은 공간복잡도 O(1)을 만족해야한다.
아무리 짱구를 굴려도 공간복잡도 O(1)로 구현할 해결책이 보이지 않는다.
Discussion을 참조하였다.
풀이 방법은 아래와 같다. fact에 근거해서 풀어가는 솔루션이다.
k = 3
Original array : 1 2 3 4 5 6 7
array 전체 역순 : 7 6 5 4 3 2 1
앞에 k개 만큼 역순 : 5 6 7 4 3 2 1
k+1부터 마지막까지 역순 : 5 6 7 1 2 3 4 ---> 정답
class Solution:
def rotate(self, nums: List[int], k: int) -> None:
# 시간복잡도 : O(N)
# 공간복잡도 : O(1)
k %= len(nums)
def reverse(nums, l, r):
while l < r:
nums[l], nums[r] = nums[r], nums[l]
l, r = l + 1, r - 1
r = len(nums) - 1
reverse(nums, 0, r)
reverse(nums, 0, k-1)
reverse(nums, k, r)
반응형
'알고리즘 > LeetCode' 카테고리의 다른 글
LeetCode 풀기 - 43. Multiply Strings (0) | 2021.11.10 |
---|---|
LeetCode 풀기 - 1704. Determine if String Halves Are Alike (0) | 2021.11.10 |
LeetCode 풀기 - 278. First Bad Version (0) | 2021.11.10 |
LeetCode 풀기 - 704. Binary Search (0) | 2021.11.10 |
LeetCode 풀기 - 890. Find and Replace Pattern (0) | 2021.11.09 |
Comments