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

Commit f893b97

Browse files
refactor 163
1 parent 431dad4 commit f893b97

File tree

1 file changed

+16
-41
lines changed
  • src/main/java/com/fishercoder/solutions

1 file changed

+16
-41
lines changed

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

+16-41
Original file line numberDiff line numberDiff line change
@@ -4,54 +4,29 @@
44
import java.util.List;
55

66
/**
7+
* 163. Missing Ranges
78
* Given a sorted integer array where the range of elements are in the inclusive range [lower, upper], return its missing ranges.
8-
* <p>
99
* For example, given [0, 1, 3, 50, 75], lower = 0 and upper = 99, return ["2", "4->49", "51->74", "76->99"].
1010
*/
1111
public class _163 {
1212

1313
public List<String> findMissingRanges(int[] nums, int lower, int upper) {
14-
List<String> res = new ArrayList<String>();
15-
16-
// the next number we need to find
17-
long next = lower;
18-
long longUpper = (long) upper;
19-
if (nums.length == 0) {
20-
res.add(getRange(lower, longUpper));
21-
return res;
22-
} else if (nums.length == 1 && nums[0] == -2147483648 && lower == -2147483648 && upper == 2147483647) {
23-
res.add(getRange(lower + 1, longUpper));
24-
return res;
25-
}
26-
27-
for (int i = 0; i < nums.length; i++) {
28-
// not within the range yet
29-
if (nums[i] < next) continue;
30-
31-
// continue to find the next one
32-
if (nums[i] == next) {
33-
next++;
34-
continue;
14+
List<String> result = new ArrayList<>();
15+
long low = (long) lower - 1;
16+
long up = 0;
17+
for (int i = 0; i <= nums.length; i++) {
18+
if (i == nums.length) {
19+
up = (long) upper + 1;
20+
} else {
21+
up = nums[i];
3522
}
36-
37-
// get the missing range string format
38-
res.add(getRange(next, nums[i] - 1));
39-
40-
// now we need to find the next number
41-
if (nums[i] < Integer.MAX_VALUE) next = nums[i] + 1;
42-
else break;
23+
if (up == low + 2) {
24+
result.add(low + 1 + "");
25+
} else if (up > low + 2) {
26+
result.add((low + 1) + "->" + (up - 1));
27+
}
28+
low = up;
4329
}
44-
45-
// do a final check
46-
if (next > Integer.MIN_VALUE && next <= longUpper && longUpper < Integer.MAX_VALUE)
47-
res.add(getRange(next, longUpper));
48-
if (next == Integer.MIN_VALUE && longUpper == Integer.MAX_VALUE && nums.length == 0)
49-
res.add(getRange(next, longUpper));
50-
51-
return res;
52-
}
53-
54-
String getRange(long n1, long n2) {
55-
return (n1 == n2) ? String.valueOf(n1) : String.format("%d->%d", n1, n2);
30+
return result;
5631
}
5732
}

0 commit comments

Comments
 (0)