?LeetCode刷題實戰(zhàn)163:缺失的區(qū)間
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到第一個數(shù),和最后一個數(shù)到upper的missing range?
如何區(qū)分range中只有一個數(shù)和多個數(shù)?
如何有效的得到missing range的起始和結(jié)束值,同時保證不會包含數(shù)組中的數(shù)字?
public?class?Solution?{
????public?ListfindMissingRanges(int[] nums, int?lower, int?upper) {
????????Listres = new?LinkedList ();
????????// 初始化prev為lower-1,判斷是否存在“第一個”區(qū)間
????????int?prev = lower - 1, curr = 0;
????????for(int?i = 0?; i <= nums.length; i++){
????????????// 當遍歷到length時,設(shè)置curr為upper+1,判斷是否存在“最后一個”區(qū)間
????????????curr = i == nums.length ? upper + 1?: nums[i];
????????????// 如果上一個數(shù)和當前數(shù)相差大于1,說明之間有區(qū)間
????????????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;
????}
}
