给定一个无重复元素的有序整数数组,返回数组区间范围的汇总。
示例 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 可组成一个连续的区间。
解题思路
这个题目非常简单,我们直接按照题目意思来即可。我们首先定义四个指针
start
和end
最后指向的是一个连续区间的开始和结束,pre
和cur
表示之前指向的元素和当前指向的元素。我们开始遍历nums
,判断nums[cur]-nums[pre]==1
,如果成立cur++;pre++
。否则的话
令end=pre
,此时如果start!=end
的话,我们就将nums[start]->nums[end]
添加到最后的结果中去。接着令start=cur;pre++;cur++
,开始一轮新的查找。
最后代码如下
class Solution:
def summaryRanges(self, nums):
"""
:type nums: List[int]
:rtype: List[str]
"""
nums_len = len(nums)
if nums_len == 0:
return []
result = list()
start, end, pre, cur = 0, 0, 0, 1
while cur <= nums_len:
if cur < nums_len and nums[cur] - nums[pre] == 1:
cur += 1
pre += 1
else:
end = pre
if end != start:
result.append(str(nums[start])+"->"+str(nums[end]))
else:
result.append(str(nums[start]))
start = cur
cur += 1
pre += 1
return result
我将该问题的其他语言版本添加到了我的GitHub Leetcode
如有问题,希望大家指出!!!