Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit 02c14f6

Browse files
add a solution for 34
1 parent 9dc51ae commit 02c14f6

File tree

2 files changed

+52
-0
lines changed

2 files changed

+52
-0
lines changed

src/main/java/com/fishercoder/solutions/_34.java

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,4 +85,52 @@ public int[] searchRange(int[] nums, int target) {
8585
return result;
8686
}
8787
}
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+
}
88136
}

src/test/java/com/fishercoder/_34Test.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,25 +9,29 @@
99
public class _34Test {
1010
private static _34.Solution1 solution1;
1111
private static _34.Solution2 solution2;
12+
private static _34.Solution3 solution3;
1213
private static int[] nums;
1314

1415
@BeforeClass
1516
public static void setup() {
1617
solution1 = new _34.Solution1();
1718
solution2 = new _34.Solution2();
19+
solution3 = new _34.Solution3();
1820
}
1921

2022
@Test
2123
public void test1() {
2224
nums = new int[]{1, 2, 3};
2325
assertArrayEquals(new int[]{1, 1}, solution1.searchRange(nums, 2));
2426
assertArrayEquals(new int[]{1, 1}, solution2.searchRange(nums, 2));
27+
assertArrayEquals(new int[]{1, 1}, solution3.searchRange(nums, 2));
2528
}
2629

2730
@Test
2831
public void test2() {
2932
nums = new int[]{};
3033
assertArrayEquals(new int[]{-1, -1}, solution1.searchRange(nums, 0));
3134
assertArrayEquals(new int[]{-1, -1}, solution2.searchRange(nums, 0));
35+
assertArrayEquals(new int[]{-1, -1}, solution3.searchRange(nums, 0));
3236
}
3337
}

0 commit comments

Comments
 (0)