代码随想录 452 最小数量弓箭引爆气球 453 无重叠区间 763 划分字母区间

452 最小数量弓箭引爆气球

代码如下

func findMinArrowShots(points [][]int) int {

            if len(points) == 0 {  //如果气球数量为0 则返回0

                return 0

            }

            res := 1  定义弓箭数量

             sort.Slice(points,func(i,j int)bool{   //按照气球的左边界大小排序

                 return points[i][0] < points[j][0]

             })

             for i := 1 ; i < len(points) ; i++ { //遍历气球数组

                 if points[i-1][1] < points[i][0] {  //如果上一个气球的右边界小于当前气球的左边界,弓箭数加1 

                     res++ 

                 }else { 

                     points[i][1] = min(points[i-1][1],points[i][1]) //否则说明两个气球重合,则需要判断下一个气球是否能够一起被射爆,所以需要更新右边界

                 }

             }

             return res 

}

func min(a,b int) int {

    if a < b {

        return a

    }else {

        return b

    }

}

453 无重叠区间

代码如下

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

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

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

           })

           res := 0 

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

               if intervals[i-1][1] > intervals[i][0] {  //如果当前数组的左边界小于上一个数组的右边界,说明两个数组重合

                      res++ //结果加1 

                      intervals[i][1] = min(intervals[i-1][1],intervals[i][1]) //此时需要继续判断是否与下一个数组重合,所以需要更新右边界,右边界为两个数组右边界的最小值

               }

           }

           return res 

}

func min(a,b int) int {

    if a < b {

        return a 

    }else {

        return b 

    }

}

763 划分字母区间

代码如下

func partitionLabels(s string) []int {

         var res []int  //目标数组

         var mark [26]int   //定义一个记录该字母最远下标的数组

         left,right := 0,0 //左右边界

         for i := 0 ; i < len(s) ; i++ { //循环确定最远下标

             mark[s[i]-'a'] = i

         }

         for i := 0 ; i < len(s) ; i++ { 

             right = max(right,mark[s[i]-'a']) //目标元素的最远下标和之前记录的最远下标取一个最大值

             if right == i {  //如果当前下标已经等于最远下标了则记录该结果长度

                 res = append(res,right-left+1)

                 left = i + 1     //并更新左边界

             }

         }

         return res 

        

}

func max(a,b int) int {

    if a > b {

        return a 

    }else {

        return b 

    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值