Skip to content

Commit d0ad48a

Browse files
committed
Added search in rotated sorted array solution
1 parent 7db5e74 commit d0ad48a

File tree

1 file changed

+39
-0
lines changed

1 file changed

+39
-0
lines changed
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
var search = function (nums, target) {
2+
// Exception case
3+
if (nums.length === 0) return -1; // There is no element in nums
4+
if (nums.length === 1) {
5+
return nums[0] === target ? 0 : -1;
6+
}
7+
8+
// Create two pointer: left,right and mid, left = 0, right = nums.length-1
9+
let left = 0,
10+
right = nums.length - 1;
11+
12+
while (left <= right) {
13+
const mid = Math.floor((left + right) / 2);
14+
15+
if (nums[left] === target) return left;
16+
if (nums[right] === target) return right;
17+
if (nums[mid] === target) return mid;
18+
19+
// If left part is sorted, move pointer depends on target position
20+
if (nums[left] <= nums[mid]) {
21+
if (nums[left] <= target && target < nums[mid]) {
22+
right = mid - 1;
23+
} else {
24+
left = mid + 1;
25+
}
26+
// If right part is sorted, move pointer depends on target position
27+
} else {
28+
if (nums[mid] < target && target <= nums[right]) {
29+
left = mid + 1;
30+
} else {
31+
right = mid - 1;
32+
}
33+
}
34+
}
35+
return -1;
36+
};
37+
38+
// TC: O(log n)
39+
// SC: O(1)

0 commit comments

Comments
 (0)