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
}
}