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;
}
    原文作者:ShutLove
    原文地址: https://www.jianshu.com/p/8026786fbd5d
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞