Leetcode 228. Summary Ranges

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"]
Example 2:
Input: [0,2,3,4,6,8,9]
Output: ["0","2->4","6","8->9"]

思路:
关键点是确定何时加入一个新的区间,我们需要判断当前元素是否比它的前一个元素大1。
如果当前元素比前一个元素大1,更新区间最大元素;否则,判断区间起始元素和最大元素是否相等,来决定新增区间是一个数字还是a->b。
对于数组中最后一个元素,需要左一次插入区间的特殊处理。

public List<String> summaryRanges(int[] nums) {
    List<String> res = new ArrayList<>();
    if (nums == null || nums.length == 0) {
        return res;
    }
    if (nums.length == 1) {
        res.add(String.valueOf(nums[0]));
        return res;
    }

    //define variable
    int pre = nums[0], start = nums[0], end = nums[0];
    for (int i = 1; i < nums.length; i++) {
        if (nums[i] == pre + 1) {
            end = nums[i];
        }
        if (nums[i] != pre + 1) {
            if (start == end) {
                res.add(String.valueOf(start));
            } else {
                res.add(String.valueOf(start) + "->" + String.valueOf(end));
            }
            start = nums[i];
            end = nums[i];
        }
        if (i == nums.length - 1) {
            if (start == end) {
                res.add(String.valueOf(start));
            } else {
                res.add(String.valueOf(start) + "->" + String.valueOf(end));
            }
        }
        pre = nums[i];
    }

    return res;
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 14,359评论 0 33
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,228评论 19 139
  • 上海翌雪科技首款VR游戏大作《末世GNN》是公司历时数月,精心打造的一款真人对抗射击游戏。游戏使用UE4引擎,通过...
    虚拟99阅读 1,738评论 0 0
  • 这是一篇给“做书”公众号的投稿,非常令人高兴的是,稿件被公众号发布了。只不过,做书的编辑重新帮我起了一个名字,调整...
    王小常阅读 3,474评论 2 1
  • 开始阅读文章之前,花几分钟想一下,你是否有以下的经历呢? 学生时代,你是个好学听话的学生,你认真听讲,更是认真做笔...
    月青山阅读 3,584评论 3 9

友情链接更多精彩内容