LeetCode 452. 用最少数量的箭引爆气球
题目链接:452. 用最少数量的箭引爆气球
题目讲解:代码随想录
func findMinArrowShots(points [][]int) int {
var res int = 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]{ // 前一个右边界小于 后一个的左边界,不重合
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 b
}
return a
}
LeetCode 435. 无重叠区间
题目链接:435. 无重叠区间
题目讲解:代码随想录
func eraseOverlapIntervals(intervals [][]int) int {
res := 0
sort.Slice(intervals, func(i, j int)bool{
return intervals[i][0] < intervals[j][0]
})
for i := 1; i < len(intervals); i++{
if intervals[i][0] < intervals[i-1][1]{
res++
intervals[i][1] = min(intervals[i-1][1], intervals[i][1])
}
}
return res
}
func min(a, b int) int{
if a > b{
return b
}
return a
}
LeetCode 763.划分字母区间
题目链接:763.划分字母区间
题目讲解:代码随想录
func partitionLabels(s string) []int {
var res []int
var marks [26]int
size, left, right := len(s), 0, 0
for i := 0; i < size; i++{
marks[s[i] - 'a'] = i // 统计对应字母的最远位置
}
for i := 0; i < size; i++ {
right = max(right, marks[s[i] - 'a']);
if i == right {
res = append(res, right - left + 1);
left = i + 1;
}
}
return res;
}
func max(a, b int) int {
if a < b {
a = b;
}
return a;
}