Leetcode 228. Summary Ranges

作者: ShutLove | 来源:发表于2017-12-14 19:32 被阅读22次

    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;
    }

    相关文章

      网友评论

        本文标题:Leetcode 228. Summary Ranges

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