汇总区间

    前言:排序算法十分重要,先从快排学起。

题目:

228. 汇总区间

给定一个 无重复元素有序 整数数组 nums

返回 *恰好覆盖数组中所有数字最小有序 区间范围列表* 。也就是说,nums 的每个元素都恰好被某个区间范围所覆盖,并且不存在属于某个范围但不属于 nums 的数字 x

列表中的每个区间范围 [a,b] 应该按如下格式输出:

  • "a->b" ,如果 a != b
  • "a" ,如果 a == b

示例 1:

1
2
3
4
5
6
输入:nums = [0,1,2,4,5,7]
输出:["0->2","4->5","7"]
解释:区间范围是:
[0,2] --> "0->2"
[4,5] --> "4->5"
[7,7] --> "7"

示例 2:

1
2
3
4
5
6
7
输入: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"

提示:

  • 0 <= nums.length <= 20
  • -231 <= nums[i] <= 231 - 1
  • nums 中的所有值都 互不相同
  • nums 按升序排列

解答:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
class Solution:
def summaryRanges(self, nums: List[int]) -> List[str]:
# res = []
# i = 0
# if len(nums) ==1:
# return [str(nums[0])]
# while i<len(nums):

# if i==0:
# start = nums[i]

# else:

# if nums[i] != nums[i-1]+1:
# if start == nums[i-1]:
# res.append(str(nums[i-1]))
# else:
# res.append("{}->{}".format(start,nums[i-1]))
# start = nums[i]

# if i== len(nums)-1:
# if start == nums[i]:
# res.append(str(nums[i]))
# else:
# res.append("{}->{}".format(start,nums[i]))
# i+=1
# # print(i,start,res)
# return res

res = []
i = 0

while i < len(nums):
j = i+1
while j < len(nums) and nums[j] == nums[j-1]+1:
j+=1

if j==i+1:
res.append(str(nums[i]))
else:
res.append("{}->{}".format(nums[i],nums[j-1]))
i = j
return res