【错题集-编程题】活动安排(贪心 - 区间)

简介: 【错题集-编程题】活动安排(贪心 - 区间)

牛客对应题目链接:活动安排_牛客题霸_牛客网 (nowcoder.com)


一、分析题目

区间问题的贪心:排序,然后分情况讨论,看看是合并还是求交集。


二、代码

1、没看题解之前AC的代码

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
 
typedef pair<int, int> PII;
vector<PII> q;
 
bool cmp(PII x, PII y)
{
    return x.second<y.second;
}
 
int main()
{
    int n;
    cin >> n;
    while(n--)
    {
        int a, b;
        cin >> a >> b;
        q.push_back({a, b});
    }
    sort(q.begin(), q.end(), cmp);
    int cnt=1;
    int ed=q[0].second;
    for(int i=1; i<q.size(); i++)
    {
        if(ed<=q[i].first)
        {
            cnt++;
            ed=q[i].second;
        }
    }
    cout << cnt << endl;
    return 0;
}

2、值得学习的代码

//写法一
#include <iostream>
#include <algorithm>
using namespace std;
 
typedef pair<int, int> PII;
 
const int N = 2e5 + 10;
 
int n;
PII arr[N];
 
int main()
{
    cin >> n;
    for(int i = 0; i < n; i++) cin >> arr[i].first >> arr[i].second;
    sort(arr, arr + n);
 
    int ret = 0, r = arr[0].second;
    for(int i = 1; i < n; i++)
    {
        if(arr[i].first < r) // 有重叠
        {
            r = min(r, arr[i].second);
        } 
        else // 没有重叠
        {
            ret++;
            r = arr[i].second;
        }
    }
    cout << ret + 1 << endl;
 
    return 0;
}
 
//写法二
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
 
const int N=2e5+10;
 
struct activity
{
    int a;
    int b;
    static bool cmp(const activity& v1, const activity& v2)
    {
        return v1.b<v2.b;
    }
}ac[N];
 
int main()
{
    int n;
    cin >> n;
    for(int i=0; i<n; i++)
        cin >> ac[i].a >> ac[i].b;
    sort(ac, ac+n, activity::cmp);
    int cnt=1;
    int ed=ac[0].b;
    for(int i=1; i<n; i++)
    {
        if(ed<=ac[i].a)
        {
            cnt++;
            ed=ac[i].b;
        }
    }
    cout << cnt << endl;
    return 0;
}

三、反思与改进

对手写 cmp 排序还不够熟悉,需要多尝试不同写法并牢记。


相关文章
|
运维 网络协议 Ubuntu
flume 通过syslog协议读取系统日志
flume 通过syslog协议读取系统日志
|
SQL XML 存储
Mybatis之Mapper代理开发
Mybatis之Mapper代理开发
259 0
|
机器学习/深度学习
CSS3动画属性 animation详解(看完就会)
CSS3动画属性 animation详解(看完就会)
354 0
CSS3动画属性 animation详解(看完就会)
|
弹性计算 监控 安全
ECS使用体验
使用阿里云也很省心。不需要花时间维修服务器硬件,有阿里监控服务器,也很稳定,不会出现异常关机等掉线状况。阿里云服务器非常安全,不会出现安全问题。能愿意花钱投入资金给我们这些穷学生一个免费使用的机会,也是很良心啦。用了好几天我差点忘了这事情,然后阿里还会发短信提示我服务器要到期了,短信看过之后忘了,工作人员直接打电话联系我。服务还是很贴心的,不然我自己可能记不住时间,万一过期了都不知道。感觉整个流程使用下来,体验还是不错的。如果以后有需要,自己也会选择继续使用阿里云的服务器。以后的工作什么遇到有需要的,阿里云服务器也是一个不错的选择。
|
JavaScript 开发工具 数据安全/隐私保护
Node.js学习笔记(二、NPM 使用)
Node.js学习笔记(二、NPM 使用)
192 0
Node.js学习笔记(二、NPM 使用)
斐波那契数列
题目描述 时间限制: 5 Sec 内存限制: 128 MB 小牛:“话说,斐波那契数列1, 1, 2, 3, 5, 8, 13…是一个神奇的数列,它的……” !@#¥%……&(小牛被众人群殴——“就这玩意,谁不懂啊?”) 小牛:“咳咳,这可是我的地盘,听我的!这是一道水题,要求输入正数n,输出相应的第n个(从1计)斐波那契数。
1141 0
|
关系型数据库 MySQL Linux
linux mysql root 忘记密码了,完美解决-费元星站长
修改MySQL的配置文件(默认为/etc/my.cnf),在[mysqld]下添加一行skip-grant-tables   保存配置文件后,重启MySQL服务 service mysqld restart   再次进入MySQL命令行 mysql -uroot -p,输入密码时直接回车,就会进入MySQL数据库了,这个时候按照常规流程修改root密码即可。
3078 0
|
4天前
|
人工智能 JavaScript Linux
【Claude Code 全攻略】终端AI编程助手从入门到进阶(2026最新版)
Claude Code是Anthropic推出的终端原生AI编程助手,支持40+语言、200k超长上下文,无需切换IDE即可实现代码生成、调试、项目导航与自动化任务。本文详解其安装配置、四大核心功能及进阶技巧,助你全面提升开发效率,搭配GitHub Copilot使用更佳。
|
6天前
|
存储 人工智能 自然语言处理
OpenSpec技术规范+实例应用
OpenSpec 是面向 AI 智能体的轻量级规范驱动开发框架,通过“提案-审查-实施-归档”工作流,解决 AI 编程中的需求偏移与不可预测性问题。它以机器可读的规范为“单一真相源”,将模糊提示转化为可落地的工程实践,助力开发者高效构建稳定、可审计的生产级系统,实现从“凭感觉聊天”到“按规范开发”的跃迁。
847 13
|
3天前
|
云安全 安全
免费+限量+领云小宝周边!「阿里云2026云上安全健康体检」火热进行中!
诚邀您进行年度自检,发现潜在风险,守护云上业务连续稳健运行
1165 1

热门文章

最新文章