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

}

相关推荐
WBluuue10 分钟前
Codeforces 1095 Div2(ABCDE)
c++·算法
IT当时语_青山师__JAVA技术栈16 分钟前
数组与链表深度解析:从内存布局到工业级实践
java·算法·面试
吃着火锅x唱着歌17 分钟前
LeetCode 496.下一个更大元素I
算法·leetcode·职场和发展
不知名的忻24 分钟前
关键路径(Java)
java·数据结构·算法·关键路径
大大杰哥26 分钟前
2025ccpc南昌补题笔记(前六题)
c++·笔记·算法
手写码匠27 分钟前
手写 AI 智能路由系统:从零构建多模型调度与负载均衡
人工智能·深度学习·算法·aigc
sheeta199827 分钟前
LeetCode 每日一题笔记 日期:2026.05.14 题目:2784. 检查数组是否是好的
笔记·算法·leetcode
故事还在继续吗29 分钟前
DPDK 教程(三):多队列 + RSS + 多 worker 的最小转发 / Echo
算法·哈希算法·dpdk
AI科技星30 分钟前
全域数学·体积与表面积通项定理【乖乖数学】
人工智能·算法·数学建模·数据挖掘·机器人
Yingjun Mo35 分钟前
1. 在线学习引言
学习·算法