Skip to content

Commit 5cd4c26

Browse files
committed
add: solve #246 Search In Rotated Sorted Array with ts
1 parent e03925c commit 5cd4c26

File tree

1 file changed

+55
-0
lines changed

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+
// similar problem to #245 Find Minimum In Rotated Sorted Array
2+
/**
3+
* ํšŒ์ •๋œ ๋ฐฐ์—ด์—์„œ target์˜ index๋ฅผ ์ฐพ๋Š” ๋ฌธ์ œ
4+
* @param {number[]} nums - ํšŒ์ „๋œ ๋ฐฐ์—ด
5+
* @param target - ์ฐพ๋Š” ์ˆ˜
6+
* @returns {number} - target์˜ index
7+
*
8+
* ์‹œ๊ฐ„ ๋ณต์žก๋„: O(log n)
9+
* - ์ด๋ถ„ ํƒ์ƒ‰์„ ์‚ฌ์šฉํ•˜์—ฌ ์ตœ์ ์˜ ํƒ์ƒ‰์„ ์ˆ˜ํ–‰
10+
*
11+
* ๊ณต๊ฐ„ ๋ณต์žก๋„: O(1)
12+
* - ์ถ”๊ฐ€์ ์ธ ๊ณต๊ฐ„ ์‚ฌ์šฉ ์—†์ด ํฌ์ธํ„ฐ๋งŒ ์ด์šฉํ•˜์—ฌ ํƒ์ƒ‰
13+
*/
14+
function search(nums: number[], target: number): number {
15+
let left = 0, right = nums.length - 1;
16+
17+
while (left <= right) {
18+
let mid = Math.floor((left + right) / 2);
19+
20+
if (nums[mid] === target) return mid;
21+
22+
// mid๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์™ผ์ชฝ ๋ถ€๋ถ„์ด ์ •๋ ฌ๋œ ๊ฒฝ์šฐ
23+
if (nums[left] <= nums[mid]) {
24+
/**
25+
* ์™ผ์ชฝ ๋ถ€๋ถ„์ด ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ๋˜์–ด ์žˆ๋‹ค๋ฉด:
26+
* - nums[left] ~ nums[mid] ๋ฒ”์œ„๋Š” ์ •๋ ฌ๋˜์–ด ์žˆ์Œ
27+
* - target์ด ์ด ๋ฒ”์œ„ ๋‚ด์— ์žˆ๋‹ค๋ฉด, right๋ฅผ ์ค„์—ฌ์„œ ํƒ์ƒ‰
28+
* - ์•„๋‹ˆ๋ผ๋ฉด target์€ ์˜ค๋ฅธ์ชฝ์— ์žˆ์œผ๋ฏ€๋กœ left๋ฅผ ์ฆ๊ฐ€์‹œ์ผœ ํƒ์ƒ‰
29+
*/
30+
if (nums[left] <= target && target < nums[mid]) {
31+
right = mid - 1; // ์™ผ์ชฝ ๋ฒ”์œ„์—์„œ ํƒ์ƒ‰
32+
} else {
33+
left = mid + 1; // ์˜ค๋ฅธ์ชฝ ๋ฒ”์œ„์—์„œ ํƒ์ƒ‰
34+
}
35+
}
36+
// mid๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฅธ์ชฝ ๋ถ€๋ถ„์ด ์ •๋ ฌ๋œ ๊ฒฝ์šฐ
37+
else {
38+
/**
39+
* ์˜ค๋ฅธ์ชฝ ๋ถ€๋ถ„์ด ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ๋˜์–ด ์žˆ๋‹ค๋ฉด:
40+
* - nums[mid] ~ nums[right] ๋ฒ”์œ„๋Š” ์ •๋ ฌ๋˜์–ด ์žˆ์Œ
41+
* - target์ด ์ด ๋ฒ”์œ„ ๋‚ด์— ์žˆ๋‹ค๋ฉด, left๋ฅผ ๋Š˜๋ ค์„œ ํƒ์ƒ‰
42+
* - ์•„๋‹ˆ๋ผ๋ฉด target์€ ์™ผ์ชฝ์— ์žˆ์œผ๋ฏ€๋กœ right๋ฅผ ๊ฐ์†Œ์‹œ์ผœ ํƒ์ƒ‰
43+
*/
44+
if (nums[mid] < target && target <= nums[right]) {
45+
left = mid + 1; // ์˜ค๋ฅธ์ชฝ ๋ฒ”์œ„์—์„œ ํƒ์ƒ‰
46+
} else {
47+
right = mid - 1; // ์™ผ์ชฝ ๋ฒ”์œ„์—์„œ ํƒ์ƒ‰
48+
}
49+
}
50+
}
51+
52+
// target์„ ์ฐพ์ง€ ๋ชปํ•œ ๊ฒฝ์šฐ
53+
return -1;
54+
}
55+

0 commit comments

Comments
ย (0)