228. 汇总区间

题目:

思路:

【1】正常遍历合并即可

代码展示:

//时间6 ms 击败 42.95%
//内存40.1 MB 击败 6.36%
//时间复杂度:O(n),其中 n 为数组的长度。
//空间复杂度:O(1)。除了用于输出的空间外,额外使用的空间为常数。
//为了避免数据溢出导致问题故判断采用 tem  > (end + 1) ,
//而非 tem - end > 1 , 因为正减负(本应该是正数),由于溢出而变为负会导致结果不正确
class Solution {
    public List<String> summaryRanges(int[] nums) {
        ArrayList<String> res = new ArrayList<>();
        if (nums.length == 0) return res;
        int start = nums[0], end = nums[0];
        for (int i = 1; i < nums.length; i++){
            int tem = nums[i];
            if (tem  > (end + 1)){
                if (start == end)
                    res.add(start+"");
                else
                    res.add(start+"->"+end);
                // 进行重置区间
                start = tem;
                end = tem;
            }else {
                end++;
            }
        }

        // 当遍历完数组的时候要进行处理
        if (start == end)
            res.add(start+"");
        else
            res.add(start+"->"+end);

        return res;
    }
}


//时间0 ms 击败 100%
//内存39.5 MB 击败 88.45%
class Solution {
    public List<String> summaryRanges(int[] nums) {
        List<String> ans = new ArrayList<>();

        int i=0;
        for (int j = 0; j < nums.length; j++) {
            if(j+1 == nums.length || nums[j+1] != nums[j]+1){
                StringBuilder sb  = new StringBuilder();
                sb.append(nums[i]);
                if(j!=i){
                    sb.append("->").append(nums[j]);
                }
                ans.add(sb.toString());
                i = j+1;
            }
        }
        return ans;
    }
}

 

posted @ 2023-06-28 14:49  忧愁的chafry  阅读(13)  评论(0编辑  收藏  举报