20200801猿辅导笔试记录

这篇博客记录了猿辅导笔试中的两道题目,第一题是关于课程时间冲突的,利用排序和计数解决;第二题涉及奖券分配和收益计算,通过递归和备忘录优化解决。博主分享了自己的解题思路和代码实现,探讨了错误和优化过程。
摘要由CSDN通过智能技术生成

20200801猿辅导笔试记录


  最近比较忙,没太多时间,所以题目写的略微粗略一些。

重复的课程

输入N表示N节课,接下来输入N行每行输入课程的开始时间和结束时间,求最多的时候有几节课时间重了。
输入示例 :
4
1 4
1 2
2 3
3 4
输出:2

  这个题目描述的就很神奇,题目竟然问的是最少?这里就不纠结题目,仅供讨论。
  考虑一个时间段同时有几节课在上,在所有开始和结束的时间中遍历,如果开始一节课则同时上的课数目+1,结束一节课,则同时上的课数目-1。完整通过的人好像都是都是使用优先级队列,我觉得优先级队列在这里没必要。只需要记录一个数目即可。

#include <iostream>
#include<algorithm>
#include<vector>


using namespace std;

int main()
{
   
    int n;
	cin >> n;
	vector<int> start(n);
    vector<int> end(n);
    int a, b;

	for(int i=0;i<n;i++)
	{
   
        cin >>a>>b;
		start[i] = a;
		end[i] = b;
	}
    sort(start.begin(),start.end());
    sort(end.begin(),end.end());
    int i=0, j=0, k=0, res=0;
    while(i<n)
    {
   
        if (start[i]<end[j])
        {
   
            // 说明该在start[i]这个时段有课开了
            k += 1;
            i +=1;
            res = max(k, res);
        }
        else
        {
   
            j+=1;
            k-=1;
        }
    }
    cout 
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值