LeetCode 163. Missing Ranges

Given a sorted integer array nums, where the range of elements are in the inclusive range [lower, upper], return its missing ranges.

Example:

Input: nums = [0, 1, 3, 50, 75], lower = 0 and upper = 99,
Output: [“2”, “4->49”, “51->74”, “76->99”]

注意审题,lower一定是小于等于nums[0]的,而upper是大于等于nums[n-1]的

    public List<String> findMissingRanges(int[] nums, int lower, int upper) {
        List<String> res = new ArrayList<>();
        StringBuilder sb = new StringBuilder();
        if (nums.length == 0) {
            if (lower == upper) sb.append(lower);
            else sb.append(lower).append("->").append(upper);
            res.add(sb.toString());
            return res;
        }
        if (nums[0] != lower) {
            if (lower + 1 == nums[0]) sb.append(lower);
            else sb.append(lower).append("->").append((nums[0]-1));
            res.add(sb.toString());
            sb = new StringBuilder();
        }
        for (int i = 0; i < nums.length - 1; i++) {
            if (nums[i] + 1 >= nums[i+1] || nums[i] == Integer.MAX_VALUE) {
                continue;
            } else {
                if (nums[i] + 2 == nums[i+1])sb.append((nums[i]+1));
                else sb.append((nums[i] + 1)).append("->").append((nums[i+1]-1));
                res.add(sb.toString());
                sb = new StringBuilder();
            }
        }
        if (nums[nums.length - 1] != upper) {
            if (nums[nums.length - 1]+1 == upper) sb.append(upper);
            else sb.append((nums[nums.length - 1] + 1)).append("->").append(upper);
            res.add(sb.toString());
        } 
        return res;
    }

优化版本:

    public List<String> findMissingRanges(int[] n, int lo, int up){
     List<String> re = new ArrayList<>();
     for(int i = 0; i < n.length; i++) {
           if(i != 0 && n[i] == n[i-1])continue;
           if(n[i] == lo) {
               lo++;
          // if(lo < n[i])return re;
           }else {
               if(lo == n[i] -1)re.add(lo + "");
               else re.add(lo+"->"+(n[i]-1));
               lo = n[i]+1;
          // if(lo < n[i])return re;
           }
     }
     if(lo == up)re.add(lo + "");
     else if(lo < up) re.add(lo+"->"+up);
     return re; 
    }

猜你喜欢

转载自blog.csdn.net/katrina95/article/details/85998318