Skip to content

Commit 340e1d1

Browse files
committed
solve search in rotated sorted array
1 parent ea5153c commit 340e1d1

File tree

1 file changed

+50
-0
lines changed

1 file changed

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

0 commit comments

Comments
 (0)