Skip to content

Commit

Permalink
Solution: Find Minimum in Rotated Sorted Array
Browse files Browse the repository at this point in the history
  • Loading branch information
obzva committed Oct 10, 2024
1 parent eac930d commit eade9cd
Showing 1 changed file with 40 additions and 0 deletions.
40 changes: 40 additions & 0 deletions find-minimum-in-rotated-sorted-array/flynn.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
/*
ํ’€์ด
- ์ฃผ์–ด์ง„ ๋ฐฐ์—ด์„ ๋‘ ๋ถ€๋ถ„์œผ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด์ง„ํƒ์ƒ‰์„ ์ด์šฉํ•˜์—ฌ ํ’€์ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค
์ฃผ์–ด์ง„ ๋ฐฐ์—ด์ด A = [4,5,6,7,0,1,2] ๋ผ๊ณ  ํ•  ๋•Œ, ์ด ๋ฐฐ์—ด์€ ๋‘ ๋ถ€๋ถ„์œผ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค
A[0:3] : rotate๋˜์–ด ์•ž์œผ๋กœ ๋ฐฐ์—ด์˜ ์•ž์œผ๋กœ ์˜ฎ๊ฒจ์ง„ ๋ถ€๋ถ„
A[4:6] : rotate๋˜์–ด ๋ฐฐ์—ด์˜ ๋’ค๋กœ ๋ฐ€๋ ค๋‚œ ๋ถ€๋ถ„
์ด๊ฑธ ์กฐ๊ธˆ ๋‹ค๋ฅด๊ฒŒ ํ‘œํ˜„ํ•˜๋ฉด ์ด๋ ‡๊ฒŒ๋„ ๋ฐ”๋ผ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค
f(A) = [T, T, T, T, F, F, F] (T/F: rotate๋˜์–ด ๋ฐฐ์—ด์˜ ์•ž์œผ๋กœ ์˜ฎ๊ฒจ์ง„ ๋ถ€๋ถ„์ธ๊ฐ€?)
์ด ๋•Œ, ์šฐ๋ฆฌ๊ฐ€ ์ฐพ๋Š” ๊ฐ’ (the Minimum in the rotated sorted array)๋Š” ๋‘ ๊ตฌ๊ฐ„์˜ ๊ฒฝ๊ณ„์— ์œ„์น˜ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค
์ฆ‰, ์ฒซ๋ฒˆ์งธ F์˜ ์œ„์น˜๋ฅผ ์ฐพ๋Š” ๋ฌธ์ œ๋กœ ๋ฐ”๊ฟ” ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๋‹จ ๋œป์ž…๋‹ˆ๋‹ค
Big O
- N: ์ฃผ์–ด์ง„ ๋ฐฐ์—ด nums์˜ ๊ธธ์ด
- Time complexity: O(logN)
- Space complexity: O(1)
*/

func findMin(nums []int) int {
lo, hi := 0, len(nums)-1
// rotate๊ฐ€ 0๋ฒˆ ์‹คํ–‰๋œ ๊ฒฝ์šฐ, ์ด์ง„ํƒ์ƒ‰์„ ์‹คํ–‰ํ•  ํ•„์š”๊ฐ€ ์—†๊ณ  ์ด์ง„ํƒ์ƒ‰์˜ ์ดˆ๊ธฐ๊ฐ’ ์„ค์ •์ด ๊นŒ๋‹ค๋กœ์›Œ์ง€๊ธฐ ๋•Œ๋ฌธ์— ์ฒ˜์Œ์— ๋”ฐ๋กœ ์ฒ˜๋ฆฌํ•ด์ค๋‹ˆ๋‹ค
// ์•ž์„œ hi์˜ ์ดˆ๊ธฐ๊ฐ’์„ ์„ค์ •ํ•  ๋•Œ, len(nums)๊ฐ€ ์•„๋‹Œ len(nums) - 1๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์—ˆ๋˜ ์ด์œ ์ด๊ธฐ๋„ ํ•ฉ๋‹ˆ๋‹ค
if nums[lo] < nums[hi] {
return nums[lo]
}

for lo < hi {
mid := lo + (hi-lo)/2

// ๋งŒ์ผ mid๊ฐ€ ์•ž์œผ๋กœ ๋ฐ€๋ ค๋‚œ ๋ถ€๋ถ„์— ์†ํ•œ๋‹ค๋ฉด...
if nums[lo] <= nums[mid] && nums[mid] > nums[hi] {
lo = mid + 1
} else {
hi = mid
}
}

return nums[lo]
}

0 comments on commit eade9cd

Please sign in to comment.