Skip to content

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]))
})()