Skip to content

Commit eade9cd

Browse files
committed
Solution: Find Minimum in Rotated Sorted Array
1 parent eac930d commit eade9cd

File tree

1 file changed

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

1 file changed

+40
-0
lines changed
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
/*
2+
ํ’€์ด
3+
- ์ฃผ์–ด์ง„ ๋ฐฐ์—ด์„ ๋‘ ๋ถ€๋ถ„์œผ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด์ง„ํƒ์ƒ‰์„ ์ด์šฉํ•˜์—ฌ ํ’€์ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค
4+
์ฃผ์–ด์ง„ ๋ฐฐ์—ด์ด A = [4,5,6,7,0,1,2] ๋ผ๊ณ  ํ•  ๋•Œ, ์ด ๋ฐฐ์—ด์€ ๋‘ ๋ถ€๋ถ„์œผ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค
5+
A[0:3] : rotate๋˜์–ด ์•ž์œผ๋กœ ๋ฐฐ์—ด์˜ ์•ž์œผ๋กœ ์˜ฎ๊ฒจ์ง„ ๋ถ€๋ถ„
6+
A[4:6] : rotate๋˜์–ด ๋ฐฐ์—ด์˜ ๋’ค๋กœ ๋ฐ€๋ ค๋‚œ ๋ถ€๋ถ„
7+
์ด๊ฑธ ์กฐ๊ธˆ ๋‹ค๋ฅด๊ฒŒ ํ‘œํ˜„ํ•˜๋ฉด ์ด๋ ‡๊ฒŒ๋„ ๋ฐ”๋ผ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค
8+
f(A) = [T, T, T, T, F, F, F] (T/F: rotate๋˜์–ด ๋ฐฐ์—ด์˜ ์•ž์œผ๋กœ ์˜ฎ๊ฒจ์ง„ ๋ถ€๋ถ„์ธ๊ฐ€?)
9+
10+
์ด ๋•Œ, ์šฐ๋ฆฌ๊ฐ€ ์ฐพ๋Š” ๊ฐ’ (the Minimum in the rotated sorted array)๋Š” ๋‘ ๊ตฌ๊ฐ„์˜ ๊ฒฝ๊ณ„์— ์œ„์น˜ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค
11+
์ฆ‰, ์ฒซ๋ฒˆ์งธ F์˜ ์œ„์น˜๋ฅผ ์ฐพ๋Š” ๋ฌธ์ œ๋กœ ๋ฐ”๊ฟ” ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋‹จ ๋œป์ž…๋‹ˆ๋‹ค
12+
13+
Big O
14+
- N: ์ฃผ์–ด์ง„ ๋ฐฐ์—ด nums์˜ ๊ธธ์ด
15+
16+
- Time complexity: O(logN)
17+
- Space complexity: O(1)
18+
*/
19+
20+
func findMin(nums []int) int {
21+
lo, hi := 0, len(nums)-1
22+
// rotate๊ฐ€ 0๋ฒˆ ์‹คํ–‰๋œ ๊ฒฝ์šฐ, ์ด์ง„ํƒ์ƒ‰์„ ์‹คํ–‰ํ•  ํ•„์š”๊ฐ€ ์—†๊ณ  ์ด์ง„ํƒ์ƒ‰์˜ ์ดˆ๊ธฐ๊ฐ’ ์„ค์ •์ด ๊นŒ๋‹ค๋กœ์›Œ์ง€๊ธฐ ๋•Œ๋ฌธ์— ์ฒ˜์Œ์— ๋”ฐ๋กœ ์ฒ˜๋ฆฌํ•ด์ค๋‹ˆ๋‹ค
23+
// ์•ž์„œ hi์˜ ์ดˆ๊ธฐ๊ฐ’์„ ์„ค์ •ํ•  ๋•Œ, len(nums)๊ฐ€ ์•„๋‹Œ len(nums) - 1๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์—ˆ๋˜ ์ด์œ ์ด๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค
24+
if nums[lo] < nums[hi] {
25+
return nums[lo]
26+
}
27+
28+
for lo < hi {
29+
mid := lo + (hi-lo)/2
30+
31+
// ๋งŒ์ผ mid๊ฐ€ ์•ž์œผ๋กœ ๋ฐ€๋ ค๋‚œ ๋ถ€๋ถ„์— ์†ํ•œ๋‹ค๋ฉด...
32+
if nums[lo] <= nums[mid] && nums[mid] > nums[hi] {
33+
lo = mid + 1
34+
} else {
35+
hi = mid
36+
}
37+
}
38+
39+
return nums[lo]
40+
}

0 commit comments

Comments
ย (0)