題目描述:
給定乙個無重複元素的有序整數陣列 nums 。
返回 恰好覆蓋陣列中所有數字 的 最小有序 區間範圍列表。也就是說,nums 的每個元素都恰好被某個區間範圍所覆蓋,並且不存在屬於某個範圍但不屬於 nums 的數字 x 。
列表中的每個區間範圍 [a,b] 應該按如下格式輸出:
「a->b」 ,如果 a != b
「a」 ,如果 a == b
示例 1:
輸入:nums = [0,1,2,4,5,7]
輸出:[「0->2」,「4->5」,「7」]
解釋:區間範圍是:
[0,2] --> 「0->2」
[4,5] --> 「4->5」
[7,7] --> 「7」
示例 2:
輸入:nums = [0,2,3,4,6,8,9]
輸出:[「0」,「2->4」,「6」,「8->9」]
解釋:區間範圍是:
[0,0] --> 「0」
[2,4] --> 「2->4」
[6,6] --> 「6」
[8,9] --> 「8->9」
示例 3:
輸入:nums =
輸出:示例 4:
輸入:nums = [-1]
輸出:["-1"]
示例 5:
輸入:nums = [0]
輸出:[「0」]
0 <= nums.length <= 20
-231 <= nums[i] <= 231 - 1
nums 中的所有值都 互不相同
nums 按公升序排列
解題思路:
首先清楚題目的意思,題目就是讓我們將陣列中連續的數字整合起來。
我們使用兩個指標:start和end來分別代表每一段的起點和終點。
當end指向的數字與後面乙個數字為連續數時(即nums[end] + 1 == nums[end + 1]),end指標後移。
不為連續數時,說明連續數斷開,我們就將當前的start和end加入到結果中(注意題目,如果start和end相同,只輸出乙個數字)。然後讓start更新為end + 1,end更新為與end + 1。
我們要注意處理最後乙個數,因為迴圈中我們要判斷end後面乙個數,因此我們只能處理到倒數第二個數,否則會溢位。我採用在陣列最後新增乙個哨兵的方法,哨兵的值為原來陣列中最後乙個數 + 2。這樣就不需要特意去處理最後乙個數。
python**:
class
solution
(object):
defsummaryranges
(self, nums)
:"""
:type nums: list[int]
:rtype: list[str]
"""iflen
(nums)==0
:return nums
len(nums)-1
]+2)
start, end =0,
0 result =
while end !=
len(nums)-1
:if nums[end]+1
== nums[end +1]
: end +=
1else
:if start == end:
str(nums[start]))
start = end +
1 end = start
else
:str
(nums[start])+
'->'
+str
(nums[end]))
start = end +
1 end = start
return result
leetcode 228 彙總區間
給定乙個無重複元素的有序整數陣列 nums 返回 恰好覆蓋陣列中所有數字 的 最小有序 區間範圍列表。也就是說,nums 的每個元素都恰好被某個區間範圍所覆蓋,並且不存在屬於某個範圍但不屬於 nums 的數字 x 列表中的每個區間範圍 a,b 應該按如下格式輸出 a b 如果 a b a 如果 a ...
我的leetcode之旅 彙總區間
給定乙個無重複元素的有序整數陣列,返回陣列區間範圍的彙總。示例 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 可組成乙個連續...
228 彙總區間 力扣(LeetCode)
給定乙個無重複元素的有序整數陣列,返回陣列區間範圍的彙總。示例 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 可組成乙個連續...