代码随想录补打卡 56 合并区间

代码实现两个功能:一是合并重叠的区间,通过排序和遍历比较区间端点;二是检查并调整数字的单调递增性,遇到不递增时将前一数字减一,并将后续数字置为9。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

56 合并区间 

代码如下

func merge(intervals [][]int) [][]int {

        sort.Slice(intervals,func(i,j int)bool{  //将数组按左边界的大小排序

        return intervals[i][0]<intervals[j][0]

    })

    res := make([][]int,0) //定义一个目标数组

    res = append(res,intervals[0])  //先将数组的第一个元素加入到目标数组里

    for i := 1 ; i < len(intervals) ; i++ {

        if intervals[i][0] <= res[len(res)-1][1] {  //res[len(res)-1][1] ,res[len(res)-1]这个代表res数组里的最后一个元素,res[len(res)-1][1]表示res数组里面最后一个元素的右边界,这个判断条件是如果当前数组小于等于上一个数组的右边界说明两个数组重合了

            res[len(res)-1][1] = max(intervals[i][1],res[len(res)-1][1]) // 进行合并操作,并更新右边界

        }else {

            res = append(res,intervals[i])   //如果没有重合,则加入这个元素

        }

    }

    return res 

}


func max(a,b int) int {

    if a > b {

        return a 

    }else {

        return b 

    }

}

738 单调递增的数字

func monotoneIncreasingDigits(n int) int {

          s := strconv.Itoa(n)  //将整数转换为字符串

          ss := []byte(s)  //将字符串转换为字符

          if len(ss) <= 1 {

              return n  //如果这个数字只有一个数字直接返回

          }

        flag := -1   //设置flag ,设置为-1的目的是如果这个数组本身为单调递增的数组那么就不需要改变flag,否则就要改变flag。而修改的flag的取值是数组的下标,所以设置为-1这个下标

          for i := len(ss)-1 ; i > 0 ; i-- {

              if ss[i-1] > ss[i] {

                    ss[i-1] -= 1  //如果这个数组的当前这个数小于前一个数,那么就要将前一个数-1,并且记录当前这个数

                    flag = i 

              }

          }

        if flag != -1 {   //如果flag被修改过,则将flag之后的所有数字变为9 

            for i := flag ; i < len(ss) ; i++ {

                  ss[i] = '9'

          }

        }

          

          res, _ := strconv.Atoi(string(ss))

          return res 

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值