原题链接在这里:https://leetcode.com/problems/missing-ranges/
题目:
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"].
题解:
与Summary Ranges相似.
expected是当前期待的数字, 初始化为lower.
若是expected小于nums[i]时就说明出现了missing range, 要分类加结果.
看最后一个元素是否是upper, 若不是,还需要加最后一段.
Time Complexity: O(n). Space: O(1). 不考虑res大小.
AC Java:
1 class Solution { 2 public List<String> findMissingRanges(int[] nums, int lower, int upper) { 3 List<String> res = new ArrayList<String>(); 4 if(nums == null || nums.length == 0){ 5 if(lower == upper){ 6 res.add(String.valueOf(lower)); 7 }else{ 8 res.add(lower + "->" + upper); 9 } 10 } 11 12 //最开始的expeted number 是 lower 13 long expected = lower; 14 for(int i = 0; i<nums.length; i++){ 15 long cur = (long)nums[i]; 16 if(expected < cur){ 17 //若是出现expected 小于 nums[i], 就该加missing range 到res中了 18 if(expected == cur-1){ 19 res.add(String.valueOf(expected)); 20 }else{ 21 res.add(String.valueOf(expected) + "->" + String.valueOf(cur-1)); 22 } 23 } 24 25 //不论expected 是否等于 nums[i], 都更新expected 到 num[i]+1. 26 expected = cur+1; 27 28 //到了nums最后一个还是没有到达upper 29 if(i == nums.length-1 && nums[i] < upper){ 30 if(nums[i] == upper - 1){ 31 res.add(String.valueOf(upper)); 32 }else{ 33 res.add(String.valueOf(nums[i]+1) + "->" + upper); 34 } 35 } 36 } 37 38 return res; 39 } 40 }