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

}

相关推荐
代码中介商5 分钟前
红黑树完全指南:从五条性质到完整插入删除实现
数据结构·算法
JieE2127 分钟前
反转链表:从双指针到递归,吃透链表反转的核心逻辑
javascript·算法
用户3983461612014 分钟前
Go-Spring 实战第 10 课 —— 依赖注入的方式:字段注入和构造函数注入
spring·go
玖釉-24 分钟前
旋转图像:从矩阵转置、镜像到坐标变换的系统理解
c++·windows·算法·图形渲染
fengenrong40 分钟前
20260522
算法
一条大祥脚1 小时前
Codeforces Round 1099 (Div. 2) 构造|贪心|图论|还原数组
java·算法·图论
Sheldon Chao1 小时前
Lecture 7 基于策略梯度的算法
人工智能·算法·机器学习
始三角龙1 小时前
LeetCode hoot 100 -- 缺失的第一个正整数
算法·leetcode·职场和发展
飞Link2 小时前
深度解析孪生网络(Siamese Network):从原理、技巧到实战应用
算法·数据挖掘·回归
测试狗科研平台2 小时前
洞悉微观电荷流动,VASP计算电荷密度分布
算法·云计算·开源软件