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

福大大 答案2021-04-22:

小根堆。
1.按线段起点排序。
2.遍历线段,push和pop小根堆。
2.1.小根堆循环pop小于等于线段起点的值。
2.2.把线段结束位置push到小根堆中。
2.3.收集最大的小根堆长度,假设是max。
3.返回max。

代码用golang编写。代码如下:

package main

import (
"container/heap"
"fmt"
"sort"
) func main() {
lines := []*Line{
&Line{Start: 1, End: 7},
&Line{Start: 4, End: 8},
&Line{Start: 2, End: 3},
&Line{Start: 4, End: 9},
&Line{Start: 4, End: 10}}
ret := MaxCover(lines)
fmt.Println(ret)
} func MaxCover(lines []*Line) int {
sort.Slice(lines, func(i int, j int) bool {
return lines[i].Start < lines[j].Start
})
queue := IntHeap([]int{})
max := 0
for i := 0; i < len(lines); i++ {
for queue.Len() > 0 {
pop := queue.Pop().(int)
if pop > lines[i].Start {
heap.Push(&queue, pop) //由于heap里没有Peek方法,所以需要模拟Peek方法。
break
}
}
heap.Push(&queue, lines[i].End)
max = getMax(max, queue.Len())
}
return max
} func getMax(a int, b int) int {
if a > b {
return a
} else {
return b
}
} type Line struct {
Start int
End int
} // An IntHeap is a min-heap of ints.
//type IntHeap []int
type IntHeap sort.IntSlice //func (h IntHeap) Len() int { return len(h) }
//func (h IntHeap) Less(i, j int) bool { return h[i] < h[j] }
//func (h IntHeap) Swap(i, j int) { h[i], h[j] = h[j], h[i] } func (h IntHeap) Len() int { return sort.IntSlice(h).Len() }
func (h IntHeap) Less(i, j int) bool { return !sort.IntSlice(h).Less(i, j) }
func (h IntHeap) Swap(i, j int) { sort.IntSlice(h).Swap(i, j) } func (h *IntHeap) Push(x interface{}) {
// Push and Pop use pointer receivers because they modify the slice's length,
// not just its contents.
*h = append(*h, x.(int))
} func (h *IntHeap) Pop() interface{} {
old := *h
n := len(old)
x := old[n-1]
*h = old[0 : n-1]
return x
}

执行结果如下:


左神java代码

2021-04-22:给定很多线段,每个线段都有两个数[start, end],表示线段开始位置和结束位置,左右都是闭区间,规定:1)线段的开始和结束位置一定都是整数值,2)线段重合区域的长度必须>=的更多相关文章

  1. 2021.04.24【NOIP提高B组】模拟 总结

    2021.04.24[NOIP提高B组]模拟 总结 T1 题意:有一圈数.两两之间有加法或乘法操作, 问你开始断掉那条边使得剩下的序列经过某种操作后的值最大 看上去是个区间 dp .然后直接断环成列, ...

  2. Ubuntu20.04/22.04 安装 Arduino IDE 2.x

    这周收到两片基于LGT8F328P LQFP32的Arduino Mini EVB, 机器上没有 Arduino 环境需要新安装, 正好感受一下新出的 Arduino IDE 2.x, 记录一下 Ub ...

  3. java例题_47 读取 7 个数(1—50)的整数值,每读取一个值,程序打印出该值个数的*

    1 /*47 [程序 47 打印星号] 2 题目:读取 7 个数(1-50)的整数值,每读取一个值,程序打印出该值个数的*. 3 */ 4 5 /*分析 6 * 1.多次读取---for循环 7 * ...

  4. 2021.9.22考试总结[NOIP模拟59]

    T1 柱状图 关于每个点可以作出两条斜率绝对值为\(1\)的直线. 将绝对值拆开,对在\(i\)左边的点\(j\),\(h_i-i=h_j-j\),右边则是把减号换成加号. 把每个点位置为横坐标,高度 ...

  5. http://www.blogjava.net/crespochen/archive/2011/04/22/348819.html

    http://blog.csdn.net/supersky07/article/details/7407523 http://blog.csdn.net/cuker919/article/detail ...

  6. Java中整数值的4中表示方式u

    Java中整数值有4中表示方式:十进制.二进制.八进制和十六进制,其中二进制的整数以0b或0B开头:八进制的整数以0开头: 十六进制的整数以0x或0X开头,其中10-15分别以a-f(此处的a-f不区 ...

  7. Java中Integer类型的整数值的大小比较

    如果比较两个数值相等的Integer类型的整数,我们可能会发现,用"=="比较(首先你必须明确"=="比较的是地址),有的时候返回true,而有的时候,返回fa ...

  8. Gym 101064 D Black Hills golden jewels 【二分套二分/给定一个序列,从序列中任意取两个数形成一个和,两个数不可相同,要求求出第k小的组合】

    D. Black Hills golden jewels time limit per test 2 seconds memory limit per test 256 megabytes input ...

  9. 我家用的网络IP地址给定,MAC绑定,我买了个无线路由器,请问怎么设定能让我的电脑和手机都能上网

    我家用的网络IP地址给定,MAC绑定,我买了个无线路由器,请问怎么设定能让我的电脑和手机都能上网   房东给的IP地址是:192.168.1.5 255.255.255.0 192.168.1.1 2 ...

  10. 17.从键盘上输入一个正整数n,请按照以下五行杨辉三角形的显示方式, 输出杨辉三角形的前n行。请采用循环控制语句来实现。 (三角形腰上的数为1,其他位置的数为其上一行相邻两个数之和。) 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1

    17.从键盘上输入一个正整数n,请按照以下五行杨辉三角形的显示方式, 输出杨辉三角形的前n行.请采用循环控制语句来实现. (三角形腰上的数为1,其他位置的数为其上一行相邻两个数之和.) 1 1 1 1 ...

随机推荐

  1. [imx6ull] 源码下载

    uboot git clone https://source.codeaurora.org/external/imx/uboot-imx cd uboot-imx make distclean mak ...

  2. Static详细讲解

    Static详细讲解 package com.andy.base.oop.demo01.demo07; import sun.dc.path.PathError; public class Perso ...

  3. mysql查询近N天的数据

    今天 select * from 表名 where to_days(时间字段名) = to_days(now()); 昨天 SELECT * FROM 表名 WHERE TO_DAYS( NOW( ) ...

  4. CF1286F Harry The Potter

    CF1286F Harry The Potter 首先答案上界为 \(n\),就是对每个点用一次操作 1. 那么我们现在的思维模式就是利用操作 2 来减少操作 1 的次数. 不难发现,如果操作 2 的 ...

  5. 咕咕list

    做完以后会留在榜上一天,这样显得咕咕list长一些 CF666E Forensic Examination(done on 2023.2.6) dp选做

  6. 第一章 1.1.1节 Kubeadm安装K8S高可用集群

    1.1 安装前必读 请不要使用带中文的服务器和克隆的虚拟机. 生产环境建议使用二进制的方式安装. 文档中的IP地址要更换成自己的IP地址,要谨记!!! 1.2 基本环境配置 kubeadm安装方式自1 ...

  7. 基于DPDK抓包的Suricata安装部署

    一.背景 Suricata支持网卡在线抓包和离线读取PCAP包两种形式的抓包: 离线抓包天然具有速度慢.非实时的特点 在线捕获数据包又包括常规网卡抓包.PF_RING和DPDK的方式 由于项目分光的流 ...

  8. 在Pycharm上使用远程服务器进行调试

    前言 缘起   Mac上没有GPU,需要用到学校服务器进行调试,于是产生了这篇博客.0.0bb 前提    首先确保已经将Pycharm配置好,通过SSH连接到服务器上的开发环境,这一步网络上有许多教 ...

  9. 钛度守望者旗舰版TSG550鼠标(原相3335芯片)拆解

    鼠标整体外观 鼠标按键支柱,采用的十字形的按键柱,没有采用现在市面上多数鼠标的平面贴片形的按键柱设计,但是耐用性比一字型的按键柱会好很多. 可换微动设计,原装的是凯华GM8.0黑曼巴8000万次微动, ...

  10. diyudio 3886 功放机鉴赏