Skip to content

Commit d9111c6

Browse files
committed
add find element in rotated sorted array
1 parent 81f2849 commit d9111c6

1 file changed

Lines changed: 55 additions & 0 deletions

File tree

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
/**
2+
* @param {number[]} nums
3+
* @param {number} target
4+
* @return {number}
5+
*/
6+
var search = function(nums, target) {
7+
function binarySearch(arr, start, end, target){
8+
let mid;
9+
while(start <= end){
10+
mid = end - parseInt((end - start)/2)
11+
if(arr[mid] === target){
12+
return mid;
13+
}else if(arr[mid] < target){
14+
start = mid + 1
15+
}else{
16+
end = mid - 1
17+
}
18+
}
19+
return -1
20+
}
21+
function findMin(arr){
22+
let start = 0;
23+
let end = arr.length-1
24+
let N = arr.length;
25+
let res = -1;
26+
27+
while(start <= end){
28+
if(arr[start] <= arr[end]){
29+
return start;
30+
}
31+
mid = end - parseInt((end-start)/2)
32+
if(arr[mid] <= arr[(mid+1) % N] && arr[mid] <= arr[(mid+ N -1)%N]) {
33+
res = mid;
34+
break;
35+
}
36+
if(arr[mid] >= arr[start]){
37+
start = mid + 1
38+
} else if (arr[mid] <= arr[end]){
39+
end = mid - 1
40+
}
41+
}
42+
return res
43+
}
44+
45+
let minimumIndex = findMin(nums);
46+
47+
48+
let res1 = binarySearch(nums, minimumIndex, nums.length, target);
49+
let res2 = binarySearch(nums, 0, minimumIndex - 1, target);
50+
51+
if(res1 !== -1){
52+
return res1;
53+
}
54+
return res2
55+
};

0 commit comments

Comments
 (0)