Skip to content

Commit aa3c57a

Browse files
authored
Merge pull request #147 from umang-sinha/33-search-in-rotated-sorted-array
Added Java 33-Search In Rotated Sorted Array
2 parents c30868a + 34eea72 commit aa3c57a

File tree

1 file changed

+46
-0
lines changed

1 file changed

+46
-0
lines changed
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
class Solution {
2+
public int search(int[] nums, int target) {
3+
int minIndex = minIndex(nums);
4+
int leftSearch = binarySearch(nums, 0, minIndex - 1, target);
5+
int rightSearch = binarySearch(nums, minIndex, nums.length - 1, target);
6+
if(leftSearch != -1){
7+
return leftSearch;
8+
} else if(rightSearch != -1){
9+
return rightSearch;
10+
} else {
11+
return -1;
12+
}
13+
}
14+
15+
public int minIndex(int[] nums){
16+
int start = 0;
17+
int end = nums.length - 1;
18+
while(start <= end){
19+
int mid = start + (end - start)/2;
20+
int prev = (mid - 1 + nums.length)%nums.length;
21+
int next = (mid + 1)%nums.length;
22+
if(nums[mid] <= nums[prev] && nums[mid] <= nums[next]){
23+
return mid;
24+
} else if(nums[mid] <= nums[end]){
25+
end = mid - 1;
26+
} else if(nums[mid] >= nums[start]){
27+
start = mid + 1;
28+
}
29+
}
30+
return -1;
31+
}
32+
33+
public int binarySearch(int[] nums, int start, int end, int target){
34+
while(start <= end){
35+
int mid = start + (end-start)/2;
36+
if(nums[mid] == target){
37+
return mid;
38+
} else if(nums[mid] < target){
39+
start = mid + 1;
40+
} else {
41+
end = mid - 1;
42+
}
43+
}
44+
return -1;
45+
}
46+
}

0 commit comments

Comments
 (0)