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