zoukankan      html  css  js  c++  java
  • Leetcode-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"].

    A better solution:

    public class Solution {
        public List<String> findMissingRanges(int[] nums, int lower, int upper) {
            List<String> resList = new LinkedList<String>();
            if (nums.length==0){
                addRange(resList,lower,upper);
                return resList;
            }
            
            int first = -1;
            for (int i=0;i<nums.length;i++)
                if (nums[i]>=lower){
                    first = i;
                    break;
                }
            int start = nums[first], end = nums[first];
            addRange(resList,lower,start-1);
            for (int i=first+1;i<nums.length;i++){
                if (nums[i]>upper) break;
                
                if (nums[i]==end+1){
                    end = nums[i];
                } else {
                    addRange(resList,end+1,nums[i]-1);
                    start = nums[i];
                    end = nums[i];
                }
            }
            addRange(resList,end+1,upper);
            return resList;
        }
        
        public void addRange(List<String> resList, int lower, int upper){
            if (upper < lower) return;
            
            if (lower==upper) resList.add(Integer.toString(lower));
            else resList.add(Integer.toString(lower)+"->"+Integer.toString(upper));
        }
    }

    Solution:

     1 public class Solution {
     2     public List<String> findMissingRanges(int[] A, int lower, int upper) {
     3         //for a range lower-upper, and a number A[i], we have conditions:
     4         //1. A[i]<lower: move to i+1;
     5         //2. A[i]==lower: lower -> A[i]+1
     6         //3. lower<A[i]<=upper: generate a range: lower->A[i]-1; lower becomes A[i]+1. NOTE A[i]==upper: end of the program.
     7         //4. A[i]>upper: get range: lower->upper, end of the problem.
     8 
     9         List<String> res = new ArrayList<String>();
    10 
    11         for (int i=0;i<A.length;i++){
    12             if (A[i]<lower) continue;
    13            
    14             if (A[i]==lower){
    15                 lower=A[i]+1;
    16                 continue;
    17             }
    18 
    19             if (A[i]>lower && A[i]<=upper){
    20                 String range = "";
    21                 if (lower!=A[i]-1) range = Integer.toString(lower)+"->"+Integer.toString(A[i]-1);
    22                 else range = Integer.toString(lower);
    23                 res.add(range);
    24                 lower = A[i]+1;
    25                 if (A[i]==upper) break;
    26                 else continue;
    27             }
    28 
    29             if (A[i]>upper){
    30                 String range = "";
    31                 if (lower!=upper) range = Integer.toString(lower)+"->"+Integer.toString(upper);
    32                 else range = Integer.toString(lower);
    33                 res.add(range);
    34                 lower = A[i]+1;
    35                 break;
    36             }
    37         }
    38 
    39         if (lower<=upper){
    40             String range = "";
    41             if (lower!=upper) range = Integer.toString(lower)+"->"+Integer.toString(upper);
    42             else range = Integer.toString(lower);
    43             res.add(range);
    44         }
    45 
    46         return res;
    47     }
    48 }
  • 相关阅读:
    hdu 1541 Stars(经典BIT)
    CODE[VS] 1082 线段树练习3(区间修改+区间查询)
    Luogu P3368 【模板】树状数组 2(区间修改,单点查询)
    牛客小白月赛5-I-区间(差分求前缀和+一次暴力统计)
    牛客小白月赛5-J-时间(time) (简单模拟)
    牛客小白月赛5-D-阶乘(求n内每个数的阶乘相乘后尾数为0的个数)
    CF1110C Meaningless Operations(构造题)
    洛谷4859 BZOJ3622 已经没什么好害怕的了(DP,二项式反演)
    二项式反演学习笔记
    UVAlive-7040 color(组合数学,二项式反演)
  • 原文地址:https://www.cnblogs.com/lishiblog/p/4160849.html
Copyright © 2011-2022 走看看