题目名称

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

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

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

“a->b” ,如果 a != b
“a” ,如果 a == b

示例

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

题解

首先针对传入的数组进行排序
使用滑动窗口的方法来确定连续的部分,遇见不连续的部分则将之前连续的部分添加到数组中

答案

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
/**
* @param {number[]} nums
* @return {string[]}
*/
var summaryRanges = function(nums) {
if(!nums.length) return []
nums = nums.sort((a, b) => a - b)
let arr = [], start = nums[0], end = nums[0]
for(let i = 1; i < nums.length; i++) {
if(nums[i] - end === 1) {
end = nums[i]
} else {
if(start === end) {
arr.push(`${start}`)
} else {
arr.push(`${start}->${end}`)
}
start = nums[i]
end = nums[i]
}
}
if(start === end) {
arr.push(`${start}`)
} else {
arr.push(`${start}->${end}`)
}
return arr
};