2021-04-22 )给出了很多线段,每个线段有两个数[start,end],表示线段的开始位置和结束位置,左右都是封闭区间。 1 )线段的开始位置和结束位置必须是整数值,2 )线段重叠的区域的长度必须是=1。 返回线最多重叠的区域包含几条线。

福大解答2021-04-22 :

小根儿山。

1 .按线段的起点排序。

2 .穿越线段、push和pop的小根山。

2.1 .小根炉循环pop在线段起点的值以下。

2.2 .将线段的结束位置向小根的山上推。

2.3 .收集最大小根的山的长度,假设为max。

3 .返回到max

代码是用谷歌写的。 代码如下所示。

打包主

import (

《容器/海》

‘ fmt ‘。

“排序”

功能主()

线:=[ ] *线

Line{Start: 1,End: 7},

Line{Start: 4,End: 8},

Line{Start: 2、End: 3}、

Line{Start: 4,End: 9},

line开始: 4,结束: 10

ret :=maxcover (线路)

fmt .打印(重置)

}

funcmaxcover (线路[ ] *线路) int

sort.slice(lines,func ) j int,j int )波尔{ )

返回线.开始线

() )

queue :=int heap ([整数] ) )。

max :=0

for i :=0; ilen (线路); I

for queue.Len ()0)

pop :=queue.Pop (().(int ) ) ) ) )。

if泊线开始

因为HEAP.push(queue,pop ) heap中没有Peek方法,所以有必要模拟Peek方法。

布雷克

}

}

推送(队列,线路[ I ] .结束)。

max=getmax(max,queue.Len ) )

}

返回最大值

}

函数矩阵(整数,整数)整数)

国际足联

返回a

} else {

返回b

}

}

类型线结构

开始时间

结束点

}

//An IntHeap is a min-heap of ints (国内支援中心)。

//type IntHeap []int

类型头排序. int切片

//func(hintheap ) Len ) )整数)返回Len ) h ) )

//func(hintheap ) Less(i ) I,j int )波尔{2}

//func(hintheap ) Swap(i ) I,j int ) ) h[I],h[j]=h[j],h[I] ) ) ) ) ) ) ) ) ) ) )

func(hintheap ) Len ) ) int {返回排序.英寸切片(h ) h ).len }

func(hintheap ) Less(i ) I,j int )波尔! sort.int片断(h ).less(I,j )。

func(hintheap )交换(I,j int )软件交换(h ) .交换) I,j ) )

func(h*intheap )推送) xinterface{} )。

//pushandpopusepointerreceiversbecausetheymodifytheslice ‘ s长度,

//not just its内容。

* * h=应用(h,x.) )整数)

}

func(h*intheap ) Pop ) )界面{ {2}

old :=*h

n:=Len(old )。

x :=old[n-1]

*h=old[0 : n-1]

返回x

}执行结果如下。

线段的计算(数线段)-冯金伟博客园

* * * *

左神java代码(https://Github.com/Algorithm Zuo/Algorithm basic 2020/Blob/master/SRC/class 07/code 01 _ cover max.Java代码)