Skip to content

Commit 19e7a1b

Browse files
add a solution for 34
1 parent d376196 commit 19e7a1b

File tree

2 files changed

+82
-40
lines changed

2 files changed

+82
-40
lines changed

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

+74-36
Original file line numberDiff line numberDiff line change
@@ -2,49 +2,87 @@
22

33
public class _34 {
44

5-
public int[] searchRange(int[] nums, int target) {
6-
int[] range = new int[2];
7-
range[0] = -1;
8-
range[1] = -1;
9-
if (nums == null || nums.length == 0) {
10-
return range;
11-
}
12-
int start = 0;
13-
int end = nums.length - 1;
14-
while (start + 1 < end) {
15-
int mid = start + (end - start) / 2;
16-
if (nums[mid] == target) {
17-
int left = mid;
18-
while (left - 1 >= 0 && nums[left] == nums[left - 1]) {
19-
left--;
5+
public static class Solution1 {
6+
public int[] searchRange(int[] nums, int target) {
7+
int[] range = new int[2];
8+
range[0] = -1;
9+
range[1] = -1;
10+
if (nums == null || nums.length == 0) {
11+
return range;
12+
}
13+
int start = 0;
14+
int end = nums.length - 1;
15+
while (start + 1 < end) {
16+
int mid = start + (end - start) / 2;
17+
if (nums[mid] == target) {
18+
int left = mid;
19+
while (left - 1 >= 0 && nums[left] == nums[left - 1]) {
20+
left--;
21+
}
22+
range[0] = left;
23+
int right = mid;
24+
while (right + 1 < nums.length && nums[right] == nums[right + 1]) {
25+
right++;
26+
}
27+
range[1] = right;
28+
break;
29+
} else if (nums[mid] < target) {
30+
start = mid;
31+
} else {
32+
end = mid;
33+
}
34+
}
35+
36+
if (nums[start] == target) {
37+
range[0] = start;
38+
while (start + 1 < nums.length && nums[start] == nums[start + 1]) {
39+
start++;
2040
}
21-
range[0] = left;
22-
int right = mid;
23-
while (right + 1 < nums.length && nums[right] == nums[right + 1]) {
24-
right++;
41+
range[1] = start;
42+
} else if (nums[end] == target) {
43+
range[1] = end;
44+
while (end - 1 >= 0 && nums[end] == nums[end - 1]) {
45+
end--;
2546
}
26-
range[1] = right;
27-
break;
28-
} else if (nums[mid] < target) {
29-
start = mid;
30-
} else {
31-
end = mid;
47+
range[0] = end;
3248
}
49+
return range;
3350
}
51+
}
3452

35-
if (nums[start] == target) {
36-
range[0] = start;
37-
while (start + 1 < nums.length && nums[start] == nums[start + 1]) {
38-
start++;
53+
public static class Solution2 {
54+
public int[] searchRange(int[] nums, int target) {
55+
int[] result = new int[]{-1, -1};
56+
if (nums == null || nums.length == 0) {
57+
return result;
58+
}
59+
if (nums[0] > target) {
60+
return result;
3961
}
40-
range[1] = start;
41-
} else if (nums[end] == target) {
42-
range[1] = end;
43-
while (end - 1 >= 0 && nums[end] == nums[end - 1]) {
44-
end--;
62+
if (nums[nums.length - 1] < target) {
63+
return result;
64+
}
65+
int left = 0;
66+
int right = nums.length - 1;
67+
while (left <= right) {
68+
int mid = left + (right - left) / 2;
69+
if (nums[mid] == target) {
70+
while (mid - 1 >= 0 && nums[mid] == nums[mid - 1]) {
71+
mid--;
72+
}
73+
result[0] = mid;
74+
while (mid + 1 < nums.length && nums[mid] == nums[mid + 1]) {
75+
mid++;
76+
}
77+
result[1] = mid;
78+
return result;
79+
} else if (nums[mid] > target) {
80+
right = mid - 1;
81+
} else {
82+
left = mid + 1;
83+
}
4584
}
46-
range[0] = end;
85+
return result;
4786
}
48-
return range;
4987
}
5088
}

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

+8-4
Original file line numberDiff line numberDiff line change
@@ -7,23 +7,27 @@
77
import static org.junit.Assert.assertArrayEquals;
88

99
public class _34Test {
10-
private static _34 test;
10+
private static _34.Solution1 solution1;
11+
private static _34.Solution2 solution2;
1112
private static int[] nums;
1213

1314
@BeforeClass
1415
public static void setup() {
15-
test = new _34();
16+
solution1 = new _34.Solution1();
17+
solution2 = new _34.Solution2();
1618
}
1719

1820
@Test
1921
public void test1() {
2022
nums = new int[]{1, 2, 3};
21-
assertArrayEquals(new int[]{1, 1}, test.searchRange(nums, 2));
23+
assertArrayEquals(new int[]{1, 1}, solution1.searchRange(nums, 2));
24+
assertArrayEquals(new int[]{1, 1}, solution2.searchRange(nums, 2));
2225
}
2326

2427
@Test
2528
public void test2() {
2629
nums = new int[]{};
27-
assertArrayEquals(new int[]{-1, -1}, test.searchRange(nums, 0));
30+
assertArrayEquals(new int[]{-1, -1}, solution1.searchRange(nums, 0));
31+
assertArrayEquals(new int[]{-1, -1}, solution2.searchRange(nums, 0));
2832
}
2933
}

0 commit comments

Comments
 (0)