228. 汇总区间
js
;(function () {
/**
* 228. 汇总区间
* 给定一个 【无重复元素】 的 【有序】 整数数组 nums 。
* 返回 恰好覆盖数组中所有数字 的 最小有序 区间范围列表 。
* 也就是说,nums 的每个元素都恰好被某个区间范围所覆盖,并且不存在属于某个范围但不属于 nums 的数字 x 。
*
* 列表中的每个区间范围 [a,b] 应该按如下格式输出:
* 1. "a->b" ,如果 a != b
* 2. "a" ,如果 a == b
*
* 输入:nums = [0,1,2,4,5,7]
* 输出:["0->2","4->5","7"]
*
* 输入:nums = [0,2,3,4,6,8,9]
* 输出:["0","2->4","6","8->9"]
*
*/
function summaryRanges(nums: number[]): string[] {
// 方法一:本题目主要注意的地方是【临界点】
let s = nums[0],
e = null
let res: string[] = []
if (nums.length < 2) {
s !== undefined ? res.push(s + '') : null
return res
}
for (let i = 1; i < nums.length; i++) {
// 当前元素比前一个元素的值相比,超过1
let key = !e ? s : e
if (nums[i] - key > 1) {
// 把上一个结果push出去
!e ? res.push(s + '') : res.push(s + '->' + e)
i === nums.length - 1 ? res.push(nums[i] + '') : (s = nums[i])
e = null
} else {
e = nums[i]
i === nums.length - 1 ? res.push(s + '->' + e) : null
}
}
// console.log(s)
return res
}
console.log(summaryRanges([0, 1, 2, 4, 5, 7]))
})()