Missing Ranges
Given [0, 1, 3, 50, 75], lower = 0 and upper = 99, return ["2", "4->49", "51->74", "76->99"].
- Time: O(n)
- Space: O(1)
public List<String> findMissingRanges(int[] a, int lo, int hi) {
List<String> ret = new LinkedList<>();
int next = lo;
for (int i = 0; i < a.length; i++) {
if (a[i] < next) {
continue;
} else if (a[i] == next) {
next++;
} else {
ret.add(getRange(next, a[i] - 1));
next = a[i] + 1;
}
}
if (next <= hi) {
ret.add(getRange(next, hi));
}
return ret;
}
private String getRange(int n1, int n2) {
return n1 == n2 ? String.valueOf(n1) : n1 + "->" + n2;
}