1. 题目描述

给定一个无重复元素的有序整数数组 nums
返回 恰好覆盖数组中所有数字最小有序 区间范围列表。也就是说,nums 的每个元素都恰好被某个区间范围所覆盖,并且不存在属于某个范围但不属于 nums 的数字 x
列表中的每个区间范围 [a,b] 应该按如下格式输出:

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


    示例 1:

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

    示例 2:

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

    示例 3:

    1. 输入:nums = []
    2. 输出:[]

    示例 4:

    1. 输入:nums = [-1]
    2. 输出:["-1"]

    示例 5:

    1. 输入:nums = [0]
    2. 输出:["0"]

    提示:

  • 0 <= nums.length <= 20

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

2. 解题思路

这个题目描述字很多,但是题意很简单,就是把有序数组中的连续的数字放在一个区间,不连续的数字自己成为一个区间,将这些区间放在结果中输出即可。

这里,我们就可以直接遍历数组,判断相邻的两个数字之间是不是相差1。

  • 如果相差是1,就继续遍历数组
  • 如果相差不是1,就将前面的区间放在结果中

复杂度分析:

  • 时间复杂度:O(n),其中n是数组的长度,我们需要将数组遍历一遍
  • 空间复杂度:O(1),这里只需要常数空间来储存每次的起始位置的值start

    3. 代码实现

    ```javascript /**
    • @param {number[]} nums
    • @return {string[]} */ var summaryRanges = function(nums) { let res = [], len = nums.length, start = nums[0] if(!len){
      1. return []
      } for(let i = 1; i <= len; i++){
      if(nums[i - 1] !== nums[i] - 1){
          res.push(start === nums[i - 1] ? start + '' : start + '->' + nums[i - 1])
          start = nums[i]
      }
      
      } return res };

```

4. 提交结果

image.png