File tree Expand file tree Collapse file tree 1 file changed +41
-0
lines changed
search-in-rotated-sorted-array Expand file tree Collapse file tree 1 file changed +41
-0
lines changed Original file line number Diff line number Diff line change 1+ package leetcode_study
2+
3+ /*
4+ * ํ์ ๋(shifted) ์ ๋ ฌ ๋ฐฐ์ด์์ O(log n) ์๊ฐ ๋ณต์ก๋๋ก target ๊ฐ์ index๋ฅผ ์ฐพ๋ ๋ฌธ์
5+ *
6+ * ์ด์ง ํ์ (Binary Search) ์ฌ์ฉ
7+ * ๊ฐ ๋ฐ๋ณต๋ง๋ค ์ค๊ฐ ๊ฐ(mid)์ ๊ธฐ์ค์ผ๋ก ๋ฐฐ์ด์ ์ ๋ฐ์ฉ ์ค์ด๋ฉฐ ํ์
8+ * ๋ฐฐ์ด์ ํ์ชฝ ์ ๋ฐ์ ํญ์ ์ ๋ ฌ๋์ด ์์ผ๋ฏ๋ก, ์ ๋ ฌ๋ ๊ตฌ๊ฐ์ ๊ธฐ์ค์ผ๋ก ํ์ ๋ฐฉํฅ ๊ฒฐ์
9+ *
10+ * ์๊ฐ ๋ณต์ก๋: O(log n)
11+ * -> ๋งค๋ฒ ํ์ ๊ณต๊ฐ์ ์ ๋ฐ์ผ๋ก ์ค์ด๋ฏ๋ก O(log n)
12+ * ๊ณต๊ฐ ๋ณต์ก๋: O(1)
13+ * -> ์ถ๊ฐ์ ์ธ ๊ณต๊ฐ์ ์ฌ์ฉํ์ง ์๊ณ ๋ณ์๋ง ์ฌ์ฉํ๋ฏ๋ก O(1)
14+ * */
15+ fun search (nums : IntArray , target : Int ): Int {
16+ var start = 0
17+ var end = nums.size - 1
18+
19+ while (start <= end) {
20+ val mid = start + (end - start) / 2
21+ if (nums[mid] == target) return mid
22+
23+ // ์ผ์ชฝ ๋ถ๋ถ์ด ์ ๋ ฌ๋ ๊ฒฝ์ฐ
24+ if (nums[start] <= nums[mid]) {
25+ if (nums[start] <= target && target < nums[mid]) {
26+ end = mid - 1 // ์ผ์ชฝ์์ ํ์
27+ } else {
28+ start = mid + 1 // ์ค๋ฅธ์ชฝ์์ ํ์ -> ๋ค์ ๋ฃจํ์์ ์ ๋ ฌ๋์ง ์์ ์ค๋ฅธ์ชฝ ํ์
29+ }
30+ }
31+ // ์ค๋ฅธ์ชฝ ๋ถ๋ถ์ด ์ ๋ ฌ๋ ๊ฒฝ์ฐ
32+ else {
33+ if (nums[mid] < target && target <= nums[end]) {
34+ start = mid + 1 // ์ค๋ฅธ์ชฝ์์ ํ์
35+ } else {
36+ end = mid - 1 // ์ผ์ชฝ์์ ํ์ -> ๋ค์ ๋ฃจํ์์ ์ ๋ ฌ๋์ง ์์ ์ผ์ชฝ ํ์
37+ }
38+ }
39+ }
40+ return - 1
41+ }
You canโt perform that action at this time.
0 commit comments