LeetCode刷题实战163:缺失的区间
Given a sorted integer array where the range of elements are [lower, upper] inclusive, return its missing ranges.
For example, given [0, 1, 3, 50, 75], lower = 0 and upper = 99, return ["2", "4->49", "51->74", "76->99"].
题意
示例:
输入: nums = [0, 1, 3, 50, 75], lower = 0 和 upper = 99,
输出: [“2”, “4->49”, “51->74”, “76->99”]
解题
如何处理lower到第一个数,和最后一个数到upper的missing range?
如何区分range中只有一个数和多个数?
如何有效的得到missing range的起始和结束值,同时保证不会包含数组中的数字?
public class Solution {
public ListfindMissingRanges(int[] nums, int lower, int upper) {
Listres = new LinkedList ();
// 初始化prev为lower-1,判断是否存在“第一个”区间
int prev = lower - 1, curr = 0;
for(int i = 0 ; i <= nums.length; i++){
// 当遍历到length时,设置curr为upper+1,判断是否存在“最后一个”区间
curr = i == nums.length ? upper + 1 : nums[i];
// 如果上一个数和当前数相差大于1,说明之间有区间
if(curr - prev > 1){
res.add(getRanges(prev+1, curr-1));
}
prev = curr;
}
return res;
}
private String getRanges(int from, int to){
return from == to ? String.valueOf(from) : from + "->" + to;
}
}
