Skip to content

Commit 897fe6d

Browse files
update 163
1 parent 27c1b1b commit 897fe6d

File tree

2 files changed

+80
-90
lines changed

2 files changed

+80
-90
lines changed

Diff for: src/main/java/com/fishercoder/solutions/_163.java

+21-22
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,33 @@
11
package com.fishercoder.solutions;
22

33
import java.util.ArrayList;
4+
import java.util.Arrays;
45
import java.util.List;
56

6-
/**
7-
* 163. Missing Ranges
8-
*
9-
* Given a sorted integer array where the range of elements are in the inclusive range [lower, upper], return its missing ranges.
10-
* For example, given [0, 1, 3, 50, 75], lower = 0 and upper = 99, return ["2", "4->49", "51->74", "76->99"].
11-
*/
127
public class _163 {
138
public static class Solution1 {
14-
public List<String> findMissingRanges(int[] nums, int lower, int upper) {
15-
List<String> result = new ArrayList<>();
16-
long low = (long) lower - 1;
17-
long up = 0;
18-
for (int i = 0; i <= nums.length; i++) {
19-
if (i == nums.length) {
20-
up = (long) upper + 1;
21-
} else {
22-
up = nums[i];
23-
}
24-
if (up == low + 2) {
25-
result.add(low + 1 + "");
26-
} else if (up > low + 2) {
27-
result.add((low + 1) + "->" + (up - 1));
9+
public List<List<Integer>> findMissingRanges(int[] nums, int lower, int upper) {
10+
List<List<Integer>> missingRanges = new ArrayList<>();
11+
if (nums == null || nums.length == 0) {
12+
missingRanges.add(Arrays.asList(lower, upper));
13+
return missingRanges;
14+
}
15+
//check for missing numbers between lower and nums[0]
16+
if (lower < nums[0]) {
17+
missingRanges.add(Arrays.asList(lower, nums[0] - 1));
18+
}
19+
//check for missing numbers between nums
20+
for (int i = 0; i < nums.length - 1; i++) {
21+
if (nums[i] + 1 == nums[i + 1]) {
22+
continue;
2823
}
29-
low = up;
24+
missingRanges.add(Arrays.asList(nums[i] + 1, nums[i + 1] - 1));
25+
}
26+
//check for any missing numbers between nums[n - 1] and upper
27+
if (nums[nums.length - 1] < upper) {
28+
missingRanges.add(Arrays.asList(nums[nums.length - 1] + 1, upper));
3029
}
31-
return result;
30+
return missingRanges;
3231
}
3332
}
3433
}

Diff for: src/test/java/com/fishercoder/_163Test.java

+59-68
Original file line numberDiff line numberDiff line change
@@ -1,87 +1,78 @@
11
package com.fishercoder;
22

33
import com.fishercoder.solutions._163;
4-
import org.junit.Before;
5-
import org.junit.BeforeClass;
6-
import org.junit.Test;
4+
import org.junit.jupiter.api.BeforeEach;
5+
import org.junit.jupiter.api.Test;
76

87
import java.util.ArrayList;
8+
import java.util.Arrays;
99
import java.util.List;
1010

11-
import static junit.framework.Assert.assertEquals;
11+
import static org.junit.jupiter.api.Assertions.assertEquals;
1212

1313
public class _163Test {
1414

15-
private static _163.Solution1 solution1;
16-
private static List<String> expected;
17-
private static List<String> actual;
18-
private static int[] nums;
15+
private static _163.Solution1 solution1;
16+
private static List<List<Integer>> expected;
17+
private static List<List<Integer>> actual;
18+
private static int[] nums;
1919

20-
@BeforeClass
21-
public static void setup() {
22-
solution1 = new _163.Solution1();
23-
expected = new ArrayList();
24-
actual = new ArrayList();
25-
}
20+
@BeforeEach
21+
public void setup() {
22+
solution1 = new _163.Solution1();
23+
expected = new ArrayList();
24+
actual = new ArrayList();
2625

27-
@Before
28-
public void setupForEachTest() {
29-
expected.clear();
30-
actual.clear();
31-
}
26+
expected.clear();
27+
actual.clear();
28+
}
3229

33-
@Test
34-
public void test1() {
35-
//solution1 case 1: should return ["0->2147483646"]
36-
nums = new int[] {2147483647};
37-
expected.add("0->2147483646");
38-
actual = solution1.findMissingRanges(nums, 0, 2147483647);
39-
assertEquals(expected, actual);
40-
}
30+
@Test
31+
public void test1() {
32+
nums = new int[]{2147483647};
33+
expected.add(Arrays.asList(0, 2147483646));
34+
actual = solution1.findMissingRanges(nums, 0, 2147483647);
35+
assertEquals(expected, actual);
36+
}
4137

42-
@Test
43-
public void test2() {
44-
//solution1 case 2: should return ["-2147483647->-1","1->2147483646"]
45-
nums = new int[] {-2147483648, -2147483648, 0, 2147483647, 2147483647};
46-
expected.add("-2147483647->-1");
47-
expected.add("1->2147483646");
48-
actual = solution1.findMissingRanges(nums, -2147483648, 2147483647);
49-
assertEquals(expected, actual);
50-
}
38+
@Test
39+
public void test2() {
40+
nums = new int[]{-2147483648, 0, 2147483647};
41+
expected.add(Arrays.asList(-2147483647, -1));
42+
expected.add(Arrays.asList(1, 2147483646));
43+
actual = solution1.findMissingRanges(nums, -2147483648, 2147483647);
44+
assertEquals(expected, actual);
45+
}
5146

52-
@Test
53-
public void test3() {
54-
//solution1 case 3: should return ["-2147483648->2147483647"]
55-
nums = new int[] {};
56-
expected.add("-2147483648->2147483647");
57-
actual = solution1.findMissingRanges(nums, -2147483648, 2147483647);
58-
assertEquals(expected, actual);
59-
}
47+
@Test
48+
public void test3() {
49+
nums = new int[]{};
50+
expected.add(Arrays.asList(-2147483648, 2147483647));
51+
actual = solution1.findMissingRanges(nums, -2147483648, 2147483647);
52+
assertEquals(expected, actual);
53+
}
6054

61-
@Test
62-
public void test4() {
63-
//solution1 case 4: should return ["-2147483648->2147483646"]
64-
nums = new int[] {2147483647};
65-
expected.add("-2147483648->2147483646");
66-
actual = solution1.findMissingRanges(nums, -2147483648, 2147483647);
67-
assertEquals(expected, actual);
68-
}
55+
@Test
56+
public void test4() {
57+
nums = new int[]{2147483647};
58+
expected.add(Arrays.asList(-2147483648, 2147483646));
59+
actual = solution1.findMissingRanges(nums, -2147483648, 2147483647);
60+
assertEquals(expected, actual);
61+
}
6962

70-
@Test
71-
public void test5() {
72-
//solution1 case 5: should return ["0->2147483647"]
73-
nums = new int[] {};
74-
expected.add("0->2147483647");
75-
actual = solution1.findMissingRanges(nums, 0, 2147483647);
76-
assertEquals(expected, actual);
77-
}
63+
@Test
64+
public void test5() {
65+
nums = new int[]{};
66+
expected.add(Arrays.asList(0, 2147483647));
67+
actual = solution1.findMissingRanges(nums, 0, 2147483647);
68+
assertEquals(expected, actual);
69+
}
7870

79-
@Test
80-
public void test6() {
81-
//solution1 case 6: should return ["-2147483647->2147483647"]
82-
nums = new int[] {-2147483648};
83-
expected.add("-2147483647->2147483647");
84-
actual = solution1.findMissingRanges(nums, -2147483648, 2147483647);
85-
assertEquals(expected, actual);
86-
}
71+
@Test
72+
public void test6() {
73+
nums = new int[]{-2147483648};
74+
expected.add(Arrays.asList(-2147483647, 2147483647));
75+
actual = solution1.findMissingRanges(nums, -2147483648, 2147483647);
76+
assertEquals(expected, actual);
77+
}
8778
}

0 commit comments

Comments
 (0)