Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit 29570d0

Browse files
Added search rotated
1 parent 7528ae0 commit 29570d0

File tree

1 file changed

+54
-0
lines changed

1 file changed

+54
-0
lines changed
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
/*
2+
33. Search in Rotated Sorted Array
3+
DescriptionHintsSubmissionsDiscussSolution
4+
Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand.
5+
6+
(i.e., [0,1,2,4,5,6,7] might become [4,5,6,7,0,1,2]).
7+
8+
You are given a target value to search. If found in the array return its index, otherwise return -1.
9+
10+
You may assume no duplicate exists in the array.
11+
12+
Your algorithm's runtime complexity must be in the order of O(log n).
13+
14+
Example 1:
15+
16+
Input: nums = [4,5,6,7,0,1,2], target = 0
17+
Output: 4
18+
Example 2:
19+
20+
Input: nums = [4,5,6,7,0,1,2], target = 3
21+
Output: -1
22+
23+
*/
24+
25+
/**
26+
* @param {number[]} nums
27+
* @param {number} target
28+
* @return {number}
29+
*/
30+
var search = function(nums, target) {
31+
return searchAux(nums, target, 0, nums.length -1);
32+
};
33+
34+
var searchAux = function(nums, target, start, end) {
35+
if (start > end)
36+
return - 1;
37+
var middle = Math.trunc((start + end) /2);
38+
39+
if(nums[middle] == target) {
40+
return middle;
41+
}
42+
43+
if(nums[middle] < nums[nums.length - 1]) { // right part sorted
44+
if(nums[middle] < target && nums[nums.length - 1] >= target) {
45+
return searchAux(nums, target, middle + 1, end);
46+
}
47+
return searchAux(nums, target, start, middle - 1);
48+
} else { // left part sorted
49+
if(nums[0] <= target && nums[middle] > target) {
50+
return searchAux(nums, target, start, middle - 1);
51+
}
52+
return searchAux(nums, target, middle + 1, end);
53+
}
54+
}

0 commit comments

Comments
 (0)