228. 汇总区间

2018-11-25  本文已影响0人  calm_peng

给定一个无重复元素的有序整数数组,返回数组区间范围的汇总。

示例 1:

输入: [0,1,2,4,5,7]
输出: ["0->2","4->5","7"]
解释: 0,1,2 可组成一个连续的区间; 4,5 可组成一个连续的区间。
示例 2:

输入: [0,2,3,4,6,8,9]
输出: ["0","2->4","6","8->9"]
解释: 2,3,4 可组成一个连续的区间; 8,9 可组成一个连续的区间。

分析:创建两个值 start end 来表示每次的连续的区间 i每次++
判断 nums[i] == nums[i+1] -1 是否成立 来判断是否 加入区间
这样 由前往后的 遍历会有一个问题。最后一个不会到 最后一个值与倒数第二值连续时 逻辑上没有覆盖!!导致错误。
两种改法 在最后一个后面 加入一个 前面不等的值
或者 if{} 中加条件 判断


*/



class Solution {
    public List<String> summaryRanges(int[] nums) {
        int i = 0 ,end = 0,start = 0;
        List<String> result = new ArrayList<>(); 
        int[] nums1 = new int[nums.length+1];
        for(int k = 0;k<nums.length;k++){
            nums1[k] = nums[k];
        }
        //nums1 = nums.clone();
        nums1[nums.length] = -1;
        //nums = nums1;
        while(i<nums1.length-1 && end<nums1.length){
            if(nums1[i] == nums1[i+1]-1){
                end++;
               
            }else{
                pushList(result ,nums1,start,end);
                end = end + 1;
                start = end;
                
            }
             i++;
        }
            
            
           
    
    return result;
    
    }
    public static void pushList(List<String> result,int[] nums1,int start,int end){
        if(start == end){
            String s = ""+nums1[start];
            result.add(s);
        }else{
            String s = nums1[start]+"->"+nums1[end];
            result.add(s);
        }
    }
}

leetcode

上一篇下一篇

猜你喜欢

热点阅读