File tree 2 files changed +52
-0
lines changed
main/java/com/fishercoder/solutions
test/java/com/fishercoder
2 files changed +52
-0
lines changed Original file line number Diff line number Diff line change @@ -85,4 +85,52 @@ public int[] searchRange(int[] nums, int target) {
85
85
return result ;
86
86
}
87
87
}
88
+
89
+ public static class Solution3 {
90
+ /**
91
+ * My completely original solution on 1/15/2022. A great practice to solidify binary search basics.
92
+ */
93
+ public int [] searchRange (int [] nums , int target ) {
94
+ int left = 0 ;
95
+ int right = nums .length - 1 ;
96
+ int [] ans = new int []{-1 , -1 };
97
+ while (left < right ) {
98
+ int mid = left + (right - left ) / 2 ;
99
+ if (nums [mid ] > target ) {
100
+ right = mid - 1 ;
101
+ } else if (nums [mid ] < target ) {
102
+ left = mid + 1 ;
103
+ } else {
104
+ right = mid - 1 ;
105
+ ans [0 ] = mid ;
106
+ ans [1 ] = mid ;
107
+ }
108
+ }
109
+ if (left < nums .length && nums [left ] != target && right > 0 && nums [right ] != target && right + 1 < nums .length && nums [right + 1 ] != target ) {
110
+ return ans ;
111
+ }
112
+ if (left < nums .length && nums [left ] == target ) {
113
+ ans [0 ] = left ;
114
+ ans [1 ] = left ;
115
+ }
116
+ right = nums .length - 1 ;
117
+ while (left < right ) {
118
+ int mid = left + (right - left ) / 2 ;
119
+ if (nums [mid ] < target ) {
120
+ left = mid + 1 ;
121
+ } else if (nums [mid ] > target ) {
122
+ right = mid - 1 ;
123
+ } else {
124
+ ans [1 ] = mid ;
125
+ left = mid + 1 ;
126
+ }
127
+ }
128
+ if (right >= 0 && nums [right ] == target ) {
129
+ ans [1 ] = right ;
130
+ } else if (left < nums .length && nums [left ] == target ) {
131
+ ans [1 ] = left ;
132
+ }
133
+ return ans ;
134
+ }
135
+ }
88
136
}
Original file line number Diff line number Diff line change 9
9
public class _34Test {
10
10
private static _34 .Solution1 solution1 ;
11
11
private static _34 .Solution2 solution2 ;
12
+ private static _34 .Solution3 solution3 ;
12
13
private static int [] nums ;
13
14
14
15
@ BeforeClass
15
16
public static void setup () {
16
17
solution1 = new _34 .Solution1 ();
17
18
solution2 = new _34 .Solution2 ();
19
+ solution3 = new _34 .Solution3 ();
18
20
}
19
21
20
22
@ Test
21
23
public void test1 () {
22
24
nums = new int []{1 , 2 , 3 };
23
25
assertArrayEquals (new int []{1 , 1 }, solution1 .searchRange (nums , 2 ));
24
26
assertArrayEquals (new int []{1 , 1 }, solution2 .searchRange (nums , 2 ));
27
+ assertArrayEquals (new int []{1 , 1 }, solution3 .searchRange (nums , 2 ));
25
28
}
26
29
27
30
@ Test
28
31
public void test2 () {
29
32
nums = new int []{};
30
33
assertArrayEquals (new int []{-1 , -1 }, solution1 .searchRange (nums , 0 ));
31
34
assertArrayEquals (new int []{-1 , -1 }, solution2 .searchRange (nums , 0 ));
35
+ assertArrayEquals (new int []{-1 , -1 }, solution3 .searchRange (nums , 0 ));
32
36
}
33
37
}
You can’t perform that action at this time.
0 commit comments