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

}

相关推荐
嵌入式AI的盲1 小时前
数组指针和指针数组
数据结构·算法
Indigo_code3 小时前
【数据结构】【顺序表算法】 删除特定值
数据结构·算法
阿史大杯茶4 小时前
Codeforces Round 976 (Div. 2 ABCDE题)视频讲解
数据结构·c++·算法
LluckyYH5 小时前
代码随想录Day 58|拓扑排序、dijkstra算法精讲,题目:软件构建、参加科学大会
算法·深度优先·动态规划·软件构建·图论·dfs
转调5 小时前
每日一练:地下城游戏
开发语言·c++·算法·leetcode
不穿格子衬衫5 小时前
常用排序算法(下)
c语言·开发语言·数据结构·算法·排序算法·八大排序
wdxylb5 小时前
使用C++的OpenSSL 库实现 AES 加密和解密文件
开发语言·c++·算法
aqua35357423585 小时前
蓝桥杯-财务管理
java·c语言·数据结构·算法
CV金科5 小时前
蓝桥杯—STM32G431RBT6(IIC通信--EEPROM(AT24C02)存储器进行通信)
stm32·单片机·嵌入式硬件·算法·蓝桥杯
sewinger6 小时前
区间合并算法详解
算法