Skip to content

Commit 798ef63

Browse files
committed
search-in-rotated-sorted-array solution
1 parent a3fc067 commit 798ef63

File tree

1 file changed

+67
-0
lines changed

1 file changed

+67
-0
lines changed
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
/**
2+
* @param {number[]} nums
3+
* @param {number} target
4+
* @return {number}
5+
*/
6+
var search = function (nums, target) {
7+
const pivotIndex = findPivot(nums);
8+
9+
const firstHalfResult = findIndex(nums, 0, pivotIndex - 1, target);
10+
11+
return firstHalfResult === -1 ? findIndex(nums, pivotIndex, nums.length - 1, target) : firstHalfResult;
12+
};
13+
14+
function findIndex(nums, start, end, target) {
15+
while (start <= end) {
16+
// console.log(start, end, target)
17+
const mid = start + Math.floor((end - start) / 2);
18+
19+
const midValue = nums[mid];
20+
21+
if (midValue === target) {
22+
return mid;
23+
}
24+
25+
if (nums[start] === target) {
26+
return start;
27+
}
28+
29+
if (nums[end] === target) {
30+
return end;
31+
}
32+
33+
if (nums[mid] < target) {
34+
start = mid + 1;
35+
} else if (nums[mid] > target) {
36+
end = mid - 1;
37+
}
38+
}
39+
40+
return -1;
41+
}
42+
43+
44+
function findPivot(nums) {
45+
let low = 0;
46+
let high = nums.length - 1;
47+
48+
while (low <= high) {
49+
const mid = low + Math.floor((high - low) / 2);
50+
51+
if (0 < mid && nums[mid - 1] > nums[mid]) {
52+
return mid;
53+
}
54+
55+
if (nums[0] <= nums[mid]) {
56+
low = mid + 1;
57+
} else {
58+
high = mid - 1;
59+
}
60+
61+
}
62+
63+
return 0;
64+
}
65+
66+
// ์‹œ๊ฐ„๋ณต์žก๋„ O(logn) -> ํ”ผ๋ด‡, ์ตœ์†Œ๊ฐ’์„ ์ฐพ์„ ๋•Œ ์ด์ง„ํƒ์ƒ‰์„ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ
67+
// ๊ณต๊ฐ„๋ณต์žก๋„ O(1) -> ๊ณ ์ •๋œ ๋ณ€์ˆ˜ ์‚ฌ์šฉ ์ด์™ธ์—๋Š” ๋™์ ์ธ ๋ฐฐ์—ด, ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ

0 commit comments

Comments
ย (0)