算法训练营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

}

相关推荐
SimpleLearingAI6 分钟前
大模型推理框架总结解析
算法
Σίσυφος190011 分钟前
正则化数据并校准数据
人工智能·算法·机器学习
HZ·湘怡13 分钟前
基于动态数组的栈(顺序栈)01
数据结构·算法
Chen_harmony15 分钟前
十八、C语言内存函数
c语言·算法
__Coffee__33 分钟前
封装矩阵结构体
线性代数·算法·矩阵
变量未定义~41 分钟前
字符串哈希匹配字符串
数据结构·算法·哈希算法
周末也要写八哥1 小时前
浅谈二叉树的深度优先搜索(DFS)算法
算法·深度优先
y = xⁿ1 小时前
20天速通LeetCodeday17:一维动态规划
算法
用户398346161201 小时前
Go-Spring 实战第 5 课 —— 配置来源:Reader、Provider、环境变量与命令行参数
spring·go
bnmoel1 小时前
数据结构深度剖析栈与队列:结构、边界实现与进出操作全解析
c语言·数据结构·算法··队列