算法训练营day31,贪心算法5

package main

import (

"fmt"

"sort"

)

//435. 无重叠区间

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

if len(intervals) == 0 {

return 0

}

count := 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] {

count++

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

intervals[i][1] = intervals[i-1][1]

}

}

}

return count

}

//763. 划分字母区间

func partitionLabels(s string) []int {

m1 := make(map[byte]int)

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

m1[s[i]] = i

}

result := make([]int, 0)

left, right := 0, 0

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

if m1[s[i]] > right {

right = m1[s[i]]

}

if i == right {

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

left = i + 1

}

}

return result

}

//56. 合并区间

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

result := make([][]int, 0)

sort.Slice(intervals, func(i, j int) bool {

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

})

result = append(result, intervals[0])

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

//如果当前左边界比结果数组最后一个右边界比小,说明重叠

if intervals[i][0] <= intervals[i-1][1] {

if result[len(result)-1][1] < intervals[i][1] {

result[len(result)-1][1] = intervals[i][1]

}

} else {

result = append(result, intervals[i])

}

}

return result

}

相关推荐
happymaker062613 小时前
LeetCodeHot100——128.最长连续序列
算法
余生皆假期-13 小时前
配置 CodeX 环境的 Simlink AI 工具链
笔记·单片机·嵌入式硬件·算法
qq_2965532713 小时前
[特殊字符] 旋转排序数组中的高效搜索:从线性到二分查找的进阶之路
数据结构·算法·搜索引擎·分类·柔性数组
汉字萌萌哒13 小时前
2025 CSP-S提高级(第一轮)C++真题以及答案
数据结构·算法
明志数科13 小时前
仿真数据与真实数据:机器人训练的数据策略选择
人工智能·算法·机器学习
weyyhdke13 小时前
2026电源与MCU控制设计实战:用Gemini3.5镜像站免费优化开关电源环路与电机FOC算法硬核教程
单片机·嵌入式硬件·算法
小张成长计划..13 小时前
【C++】35:位图,布隆过滤器和海量数据处理(哈希扩展)
算法·哈希算法
z2005093013 小时前
今日算法(组合问题III)(回溯的使用)
java·算法·leetcode
2401_8896269214 小时前
Java语法进阶篇
算法
Sinsa_SI14 小时前
2026算法应用主题赛初赛-小学4-6组(Python)试卷(含答案+详细解析)
开发语言·python·算法