[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