《leetCode》:Summary Ranges

本文介绍了一种算法,用于处理已排序且不含重复元素的整数数组,并返回其区间求和的简洁表示形式。例如,对于输入[0,1,2,4,5,7],算法将返回[“0->2”,“4->5”,“7”]。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目

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

For example, given [0,1,2,4,5,7], return [“0->2”,”4->5”,”7”].

思路

假设连续数的起点start=nums[0],遍历一次数组,判断nums[i-1]是否与nums[i]相等来找出不连续的点,将这些不连续的起点和终点保存并每找到一次就更新一次起点start,注意边界问题。

实现代码如下:

    public List<String> summaryRanges(int[] nums) {
        //将不连续的数字保存到一个List中即可       
        List<String> res = new ArrayList<String> ();
        if(nums==null||nums.length<=0){
            return res;
        }
        if(nums.length ==1){//要考虑长度为1这种情况
            res.add(nums[0]+"");
            return res;
        }
        //下面就是nums长度大于1的情况,找出不连续的每段数据
        int begin=nums[0];
        int end = 0;
        for(int i=1;i<nums.length;i++){
            int cur = nums[i-1];
            end = nums[i];
            if(end!=cur+1){//此时 i-1 和 i 就是不连续的点

                if(begin==cur){
                    res.add(begin+"");
                }
                else{
                    res.add(begin+"->"+cur);
                }

                begin = end;
            }   

            //将最后一组加入
            if(i == nums.length-1){
                if(begin==end){
                    res.add(begin+"");
                }
                else{
                    res.add(begin+"->"+end);
                }
            }
        }       
        return res;     
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值