228. Summary Ranges (everyday promlems) broken problems

Given a sorted integer array without duplicates, return the summary of its ranges.

Example 1:

Input:  [0,1,2,4,5,7]
Output: ["0->2","4->5","7"]
Explanation: 0,1,2 form a continuous range; 4,5 form a continuous range.

Example 2:

Input:  [0,2,3,4,6,8,9]
Output: ["0","2->4","6","8->9"]
Explanation: 2,3,4 form a continuous range; 8,9 form a continuous range.

 

broken solution : check the boundary

class Solution {
    public List<String> summaryRanges(int[] nums) {
        List<String> res = new ArrayList<>();
        int n = nums.length;
        if(n==0) return res;
        else if(n==1) {
            res.add(nums[0]+"");
            return res;
        }
        int i = 0;
        while(i<n-1){
            //case for only n-1
            if(nums[i] +1 == nums[i+1] ){ //
                int start = nums[i];
                i = i+1;
                
                while(nums[i] +1 == nums[i+1]){//i+1<n
                   
                    i++;
                }
                int end = nums[i];
                String str = start + "->" + end;
                res.add(str);
            }
            else if(nums[i] +1 != nums[i+1] ){
                res.add(nums[i]+"");}
            i++;
        }
        //check the last element
        if(nums[n-1] == nums[n-2]+1) {
            if(n>=3){
                String[] temp = res.get(res.size()-1).split("->");
                res.remove(res.size()-1);
                res.add(temp[0] + "->" + nums[n-1]);
            }else {
                //n ==2 
                res.add(nums[n-2] + "->" + nums[n-1]);
            }
        }else {
            res.add(nums[n-1]+"");
        }
        return res;
    }
}

 

revision correct one: always check the boundary

two cases: 1: 1,2,3  2: [1,2,4,5,7]

class Solution {
    public List<String> summaryRanges(int[] nums) {
        List<String> res = new ArrayList<>();
        int n = nums.length;
        if(n==0) return res;
        else if(n==1) {
            res.add(nums[0]+"");
            return res;
        }
        int i = 1;
        while(i<=n-1){
            //case for only n-1
            if(nums[i-1] +1 == nums[i] ){ //
                int start = nums[i-1];
                i = i+1;
                
                while(i<n && nums[i-1] +1 == nums[i]){//i+1<n
                    i++;
                }
                int end = nums[i-1];
                String str = start + "->" + end;
                res.add(str);
            }
            else if(nums[i-1] +1 != nums[i] ){
                res.add(nums[i-1]+"");}
            i++;
        }
        //check the last element
        if(nums[n-1] == nums[n-2]+1) {
           
        }else {
            res.add(nums[n-1]+"");
        }
        return res;
    }
}

 

 

two pointer solution

class Solution {
    public List<String> summaryRanges(int[] nums) {
        List<String> res = new ArrayList<>();
        int n = nums.length;
        if(n==0) return res;
        else if(n==1) {
            res.add(nums[0]+"");
            return res;
        }
        //use two pointers
        int i = 0;int j = 0;//i and j
        while(i<n){
            j = i+1;
            while(j < n){
                if(nums[j-1]+1 == nums[j]){
                    j++;
                }else {
                    break;
                }
            }
            if(j == i+1){
                res.add(nums[i]+"");
            }else {
                res.add(nums[i]+"->"+nums[j-1]);
            }
            i = j;
        }
        return res;
    }
}

 

 

ren ruoyousuopcheng, biypusuozhi

 

posted @ 2018-05-25 12:38  wz30  阅读(140)  评论(0编辑  收藏  举报