美文网首页
228. 汇总区间

228. 汇总区间

作者: calm_peng | 来源:发表于2018-11-25 22:28 被阅读0次
    
    给定一个无重复元素的有序整数数组,返回数组区间范围的汇总。
    
    示例 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

    相关文章

      网友评论

          本文标题:228. 汇总区间

          本文链接:https://www.haomeiwen.com/subject/ytwmqqtx.html