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

}

相关推荐
小L~~~1 小时前
基于贪心策略的混合遗传算法求解01背包问题
python·算法
洛水水1 小时前
【力扣100题】53.最长回文子串
算法·leetcode·职场和发展
jieyucx1 小时前
Go 语言 sort 包详解:从基础排序到自定义排序(含底层原理+零基础看懂)
算法·golang·排序算法·sort
鹏北海2 小时前
Go 语言基础笔记 — 面向 JS/TS 前端开发者
go
叁散2 小时前
ESP32 LCD1602显示实验报告
算法
过期动态2 小时前
【LeetCode 热题 100】盛最多水的容器
java·数据结构·spring boot·算法·leetcode·spring cloud·职场和发展
鹏北海2 小时前
Go 语言进阶笔记 — 面向 JS/TS 前端开发者
go
凌波粒2 小时前
LeetCode--700.二叉搜索树中的搜索(二叉树)
算法·leetcode·职场和发展
鹏北海2 小时前
Go 包管理笔记 — 面向 JS/TS 前端开发者
go
君为先-bey3 小时前
LeMiCa——基于扩散模型的高效视频生成的词典序最小化路径缓存
python·算法·机器学习·扩散模型