j

jaryue

V1

2023/03/17阅读:20主题:默认主题

汇总区间

题目描述

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

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

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

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

来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/summary-ranges 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解题思路

这个题主要是判断前后两数是否相差1,
最难搞的是如何正确输出字段.特别是不能超出数组范围,同时不能缺失数组末尾的元素,还要考虑只有一个元素的情况

代码示例

func summaryRanges(nums []int) []string {
    if len(nums) == 1 {
  return []string{strconv.Itoa(nums[0])}
 }
 s := []string{}
 for i, j := 01; j < len(nums); {
  if nums[j] != nums[j-1]+1 {
   if j-1 == i {
    s = append(s, strconv.Itoa(nums[i]))
    i = j
   } else {
    s = append(s, strconv.Itoa(nums[i])+"->"+strconv.Itoa(nums[j-1]))
    i = j
   }
  }
  if j >= len(nums)-1 {
   if j == i {
    s = append(s, strconv.Itoa(nums[i]))
    i = j
   } else {
    s = append(s, strconv.Itoa(nums[i])+"->"+strconv.Itoa(nums[j]))
    i = j
   }
  }
  j++
 }
 return s
}

执行结果

更多

更多解决方法请参考:https://leetcode.cn/problems/summary-ranges/solution/

分类:

后端

标签:

Golang

作者介绍

j
jaryue
V1