File tree Expand file tree Collapse file tree 1 file changed +39
-0
lines changed
search-in-rotated-sorted-array Expand file tree Collapse file tree 1 file changed +39
-0
lines changed Original file line number Diff line number Diff line change
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)
You can’t perform that action at this time.
0 commit comments