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