File tree Expand file tree Collapse file tree 1 file changed +56
-0
lines changed
search-in-rotated-sorted-array Expand file tree Collapse file tree 1 file changed +56
-0
lines changed Original file line number Diff line number Diff line change
1
+ /**
2
+
3
+ input : rotated array
4
+ output : index of target else -1
5
+
6
+ 4 5 6 7 0 1 2
7
+ target = 6
8
+ return 2
9
+
10
+ solution1) brute force
11
+ return index after loop
12
+ tc : O(n)
13
+ sc : O(1)
14
+
15
+ solution2)
16
+ separte array into 2 parts to make sure each part is sorted.
17
+ find the rotated point, binary search for target
18
+ O(logn) + O(logn)
19
+
20
+ tc : O(logn)
21
+ sc : O(1)
22
+ */
23
+ class Solution {
24
+ public int search (int [] nums , int target ) {
25
+ int l = 0 ;
26
+ int r = nums .length - 1 ;
27
+ while (l < r ) {
28
+ int mid = (r - l ) / 2 +l ;
29
+ if (nums [mid ] <= nums [r ]) {
30
+ r = mid ;
31
+ } else {
32
+ l = mid + 1 ;
33
+ }
34
+ }
35
+ // determine which part
36
+ int start = 0 ;
37
+ int end = nums .length - 1 ;
38
+ if (nums [start ] <= target && nums [Math .max (0 , l -1 )] >= target ) {
39
+ end = Math .max (0 , l - 1 );
40
+ } else if (nums [l ] <= target && nums [end ] >= target ){
41
+ start = l ;
42
+ }
43
+
44
+ while (start <= end ) {
45
+ int mid = (end - start ) / 2 + start ;
46
+ if (nums [mid ] == target ) {
47
+ return mid ;
48
+ } else if (nums [mid ] < target ) {
49
+ start = mid + 1 ;
50
+ } else {
51
+ end = mid - 1 ;
52
+ }
53
+ }
54
+ return -1 ;
55
+ }
56
+ }
You can’t perform that action at this time.
0 commit comments