Skip to content

Commit a5c5aba

Browse files
committed
feat: Solve find-minimum-in-rotated-sorted-array problem
1 parent 8cb65c8 commit a5c5aba

File tree

1 file changed

+55
-0
lines changed
  • find-minimum-in-rotated-sorted-array

1 file changed

+55
-0
lines changed
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
class Solution:
2+
"""
3+
[3, 4, 5, 1, 2] -> [2, 3, 4, 5, 1] -> [1, 2, 3, 4, 5]
4+
1. 큐의 rotate 이용 -> νšŒμ „ μ „μ˜ 첫 μš”μ†Œκ°€ νšŒμ „ ν›„μ˜ μš”μ†Œ 비ꡐ
5+
μ‹œκ°„λ³΅μž‘λ„: O(n^2)
6+
- while 루프가 μ΅œλŒ€ n번 반볡 κ°€λŠ₯
7+
- deque.rotate(Β±1) 연산이 O(n) μ‹œκ°„ μ†Œμš”
8+
- λ”°λΌμ„œ μ „μ²΄λŠ” O(n) * O(n) = O(n^2)
9+
κ³΅κ°„λ³΅μž‘λ„: O(n)
10+
- μž…λ ₯ 배열을 deque둜 λ³€ν™˜ β†’ μΆ”κ°€λ‘œ O(n) 곡간 μ‚¬μš©
11+
- λ‚˜λ¨Έμ§€λŠ” μƒμˆ˜ 곡간
12+
"""
13+
"""
14+
def findMin(self, nums: List[int]) -> int:
15+
nums = deque(nums)
16+
if len(nums) == 1:
17+
return nums[0]
18+
19+
while True:
20+
cur = nums[0]
21+
nums.rotate(1)
22+
if cur < nums[0]:
23+
nums.rotate(-1)
24+
return nums[0]
25+
"""
26+
27+
"""
28+
2. μš”μ†Œλ³„λ‘œ 이전 κ°’κ³Ό ν˜„μž¬ 값을 λΉ„κ΅ν•˜μ—¬ μž‘μ€ 값이 λ‚˜μ˜€λ©΄ κ·Έ 값이 첫번쨰 μš”μ†Œ, 즉 κ°€μž₯ μž‘μ€ μš”μ†Œκ°€ 됨
29+
μ‹œκ°„λ³΅μž‘λ„: O(n)
30+
- μ΅œμ•…μ˜ 경우 λ°°μ—΄ 전체λ₯Ό ν•œ 번 μˆœνšŒν•΄μ•Ό 함
31+
- n = len(nums)
32+
κ³΅κ°„λ³΅μž‘λ„: O(1)
33+
- μΆ”κ°€λ‘œ μ‚¬μš©ν•˜λŠ” λ³€μˆ˜λŠ” i와 λͺ‡ 개의 μƒμˆ˜ν˜• λ³€μˆ˜λΏ
34+
"""
35+
"""
36+
def findMin(self, nums: List[int]) -> int:
37+
for i in range(1, len(nums)):
38+
if nums[i - 1] > nums[i]:
39+
return nums[i]
40+
return nums[0]
41+
"""
42+
"""
43+
3. 이뢄탐색을 μ‚¬μš©ν•˜λŠ” 방법
44+
"""
45+
def findMin(self, nums: List[int]) -> int:
46+
start, end = 1, len(nums) - 1
47+
while start <= end:
48+
mid = (start + end) // 2
49+
if nums[mid - 1] > nums[mid]:
50+
return nums[mid]
51+
if nums[0] < nums[mid]:
52+
start = mid + 1
53+
else:
54+
end = mid - 1
55+
return nums[0]

0 commit comments

Comments
Β (0)