笔试算法刷题

猿辅导2021校园招聘笔试(算法一) 

牛客网 - 找工作神器|笔试题库|面试经验|实习招聘内推,求职就业一站解决_牛客网 (nowcoder.com)

第一眼看到这个题想到的是蓝桥杯飞机降落,贪心题。但是这样算的是最大不相交区间数量,仔细看题是要求最多有几个区间重叠。

然后想到了,差分,然后求前缀和可以知道每个点被选中了多少次,但是看数据范围是1e9,行不通。

看数据范围是2e5,我们只能找找有什么性质了。

那么能不能对一个时间段,存进所有重合的时间段呢?判断重合需要比较左右两边很麻烦,因此我们先把时间段按照开始时间进行排序。这样我们只需要比较当前l和上一个的r就可以了。

那么,我们存当前的r,往后找,如果当前的l比r要大就说明不重合,那么后面全都不重和,把当前r丢掉就行。否则,说明重合存入。也就是说在一个r被丢掉之前,存进的都是与之重合的边界,我们取最大值即可。

同时数据2e5,也就是nlogn,每次用最小的r,很容易想到小根堆。注意c++,优先队列默认是大根堆,std::priority_queue<int,std::vector<int>,std::greater<int>> q;小根堆加参数即可。

同时为什么这样可以找到重叠的所有呢?因为当前r不是固定的,有更小的就会替换当前的,这是一个动态更新的过程。

#include<bits/stdc++.h>
using ll=long long;
using ull=unsigned long long;

#define fir first
#define sec second

using PII=std::pair<int,int> ;
using ari=std::array<int,3>;
const int N=2e5+10;
const int mod=1e9+7;
const double eps=1e-9;

int n,m;
struct node{
	int l,r;
}a[N];
bool cmp(node a,node b)
{
	if(a.l!=b.l) return a.l<b.l;
	else return a.r<b.r; 
}
void solve()
{
	std::cin>>n;
	for(int i=1;i<=n;i++)
	{
		std::cin>>a[i].l>>a[i].r;	
	} 
	std::sort(a+1,a+1+n,cmp);
	
	int ans=0;
	std::priority_queue<int,std::vector<int>,std::greater<int>> q;//小根堆 
	for(int i=1;i<=n;i++)
	{
		while(q.size()&&a[i].l>=q.top())
		{
			q.pop();
		}
		q.push(a[i].r);
		ans=std::max(ans,(int)q.size());
	}
	std::cout<<ans<<'\n';
}
signed main()
{
    //freopen("a","w",stdout);//把结果输出到a.in里面
    std::ios::sync_with_stdio(false);
    std::cin.tie(0);

    int t=1;
    //std::cin>>t;
    while(t--)
    {
        solve();
    }
    return 0;
}

突然意识到事情严重性,不会敲板子了,只能写点思维题。。。

相关推荐

  1. Kruskal算法笔记

    2024-07-11 04:22:04       28 阅读
  2. 算法 | 日记

    2024-07-11 04:22:04       23 阅读
  3. LeetCode笔记之双指针算法

    2024-07-11 04:22:04       42 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-11 04:22:04       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-11 04:22:04       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-11 04:22:04       58 阅读
  4. Python语言-面向对象

    2024-07-11 04:22:04       69 阅读

热门阅读

  1. Rust入门实战 编写Minecraft启动器#3解析资源配置

    2024-07-11 04:22:04       19 阅读
  2. 精通Postman响应解析:正则表达式的实战应用

    2024-07-11 04:22:04       23 阅读
  3. 4DRadarSLAM算法复现

    2024-07-11 04:22:04       20 阅读
  4. 使用Spring Boot和mkcert解决本地及局域网HTTPS访问

    2024-07-11 04:22:04       27 阅读
  5. 掌握Perl的文件系统钩子:深度集成的艺术

    2024-07-11 04:22:04       22 阅读
  6. 拼多多职位数据信息采集

    2024-07-11 04:22:04       20 阅读
  7. Gunicorn的预分叉架构:快速启动与高效资源利用

    2024-07-11 04:22:04       21 阅读