Thursday, January 1, 2015

Missing Ranges (LeetCode Array)

Question: 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"].

Idea: Straightforward. Scan the array from left to right, if a range is missing, store it in result. Take care if the range has only one element, “->” is not needed. To make the code looks clean, I used a class Range which represents the ranges.

Time: O(n) Space: O(1)

Code:
 public class Solution{  
      public class Range{  
           int left;  
           int right;  
           public Range(int left, int right)  
           {  
               this.left=left;  
               this.right=right;  
           }  
           public String toString()  
           {  
               if(left==right)  
                   return Integer.toString(left);  
               else  
                  return Integer.toString(left)+"->"+Integer.toString(right);  
           }  
      }  
      public List<String> findMissingRanges(int[] A, int lower, int upper) {  
           List<String> result=new ArrayList<String>();  
           if(A.length==0)  
           {  
                Range tmp=new Range(lower,upper);  
                result.add(tmp.toString());  
                return result;  
           }  
           if(A[0]>lower)  
           {  
                Range tmp=new Range(lower,A[0]-1);  
                result.add(tmp.toString());  
           }  
           for(int i=1;i<A.length;i++)  
           {  
                if(A[i]>A[i-1]+1)  
                {  
                     Range tmp=new Range(A[i-1]+1,A[i]-1);  
                     result.add(tmp.toString());       
                }  
           }  
           if(A[A.length-1]<upper)  
           {  
                Range tmp=new Range(A[A.length-1]+1,upper);  
                result.add(tmp.toString());  
           }  
           return result;       
   }  
 }  

No comments:

Post a Comment