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代码)