LeetCode 彙總區間

2021-10-21 06:59:22 字數 1988 閱讀 9929

題目描述:

給定乙個無重複元素的有序整數陣列 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 可組成乙個連續...