Leetcode 228:彙總區間(最詳細的解法!!!)
阿新 • • 發佈:2018-11-08
給定一個無重複元素的有序整數陣列,返回陣列區間範圍的彙總。
示例 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 可組成一個連續的區間。
解題思路
這個題目非常簡單,我們直接按照題目意思來即可。我們首先定義四個指標
0 1 2 4 5 7 start end pre cur
start
和end
最後指向的是一個連續區間的開始和結束,pre
和cur
表示之前指向的元素和當前指向的元素。我們開始遍歷nums
,判斷nums[cur]-nums[pre]==1
,如果成立cur++;pre++
。否則的話
0 1 2 4 5 7
start
end
pre
cur
令end=pre
,此時如果start!=end
的話,我們就將nums[start]->nums[end]
新增到最後的結果中去。接著令start=cur;pre++;cur++
,開始一輪新的查詢。
0 1 2 4 5 7 start end 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
如有問題,希望大家指出!!!