[LeetCode] 228. 汇总区间

题目链接: https://leetcode-cn.com/problems/summary-ranges

难度:中等

通过率:48.9%

题目描述:

给定一个无重复元素的有序整数数组,返回数组区间范围的汇总。

示例:

示例 1:

输入: [0,1,2,4,5,7]
输出: ["0->2","4->5","7"]
解释: 0,1,2 可组成一个连续的区间; 4,5 可组成一个连续的区间。

示例 2:

输入: [0,2,3,4,6,8,9]
输出: ["0","2->4","6","8->9"]
解释: 2,3,4 可组成一个连续的区间; 8,9 可组成一个连续的区间。

思路:

双指针

时间复杂度:\(O(n)\)

class Solution:
    def summaryRanges(self, nums: List[int]) -> List[str]:
        if not nums: return []
        # 一直动的指针
        i = 0
        n = len(nums)
        res = []
        while i < n:
            # 记录开始的指针
            start = i
            while i < n - 1 and nums[i] + 1 == nums[i + 1]:
                i += 1
            # 相等说明, 只有一个数
            if start == i:
                res.append(str(nums[i]))
            else:
                res.append("{}->{}".format(nums[start], nums[i]))            
            i += 1
        return res

posted on 2019-09-07 17:08  威行天下  阅读(137)  评论(0编辑  收藏  举报

导航