163. Missing Ranges
题目的原意是要求返回函数能给出缺失的区间。
给定条件:一个排好序数组,指定区间【0, 99】
解题思路:可以将题目缩小到如何返回一个指定两个数的数值区间范围。
解决办法,如果两个数相等,放回单个数作为区间,如果不等则放回区间 数值A->数值B.
返回到原题,需要对一个比区间小1的数和比区间大1的数来保证每次都有两个数比较。
public List<String> findMissingRanges(int[] vals, int start, int end) {
List<String> ranges = new ArrayList<>();
//provide initial value
int prev = start - 1;
//iterate from start to the end of vals
for (int i = 0; i <= vals.length; i++) {
//check the current value of vals, if the current value equals to end,
//set current value to end + 1
int curr = (i == vals.length) ? end + 1 : vals[i];
if (curr - prev >= 2) {
ranges.add(getRange(prev + 1, curr - 1);
}
prev = curr;
}
return ranges;
}
private String getRange(int from, int to) {
return (from == to) ? String.valueOf(from) : from + "->" + to;
}