刷
June-19-2019
这傻逼题居然做了好久,动态维持lower bound,然后楞做。
重点在于edge case的处理。200 thump up, 1000+ thump down都是被edge case恶心的。。
一个是数组里可以有重复的。。
一个是边界,upper == nums[最后]的话, lower = temp + 1就变成INT最小值了。。所以不得不多加了个判断。用PYTHON是不是就没这个问题了,用JAVA导致各种被boundary恶心
public List<String> findMissingRanges(int[] nums, int lower, int upper) {
List<String> result = new ArrayList<>();
for (int i = 0; i < nums.length; i ++) {
// srsly? duplicates?
if (i != 0 && nums[i] == nums[i - 1]) continue;
int temp = nums[i];
if (temp == lower) {
} else {
if (temp - 1 == lower) {
result.add(lower + "");
} else {
result.add(lower + "->" + (temp - 1));
}
}
if (temp == upper) {
// in case temp == Integer.MAX_VALUE which makes temp + 1 == Integer.MIN_VALUE
return result;
} else {
lower = temp + 1;
}
}
if (upper == lower) {
result.add(upper + "");
} else if (upper > lower) {
result.add(lower + "->" + upper);
}
return result;
}
选值如果通过 upper - lower = Rindex - Lindex来跳过段数,应该会减少很多时间。。