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

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

牛客对应题目链接:活动安排_牛客题霸_牛客网 (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代理开发
268 0
|
机器学习/深度学习
CSS3动画属性 animation详解(看完就会)
CSS3动画属性 animation详解(看完就会)
363 0
CSS3动画属性 animation详解(看完就会)
|
弹性计算 监控 安全
ECS使用体验
使用阿里云也很省心。不需要花时间维修服务器硬件,有阿里监控服务器,也很稳定,不会出现异常关机等掉线状况。阿里云服务器非常安全,不会出现安全问题。能愿意花钱投入资金给我们这些穷学生一个免费使用的机会,也是很良心啦。用了好几天我差点忘了这事情,然后阿里还会发短信提示我服务器要到期了,短信看过之后忘了,工作人员直接打电话联系我。服务还是很贴心的,不然我自己可能记不住时间,万一过期了都不知道。感觉整个流程使用下来,体验还是不错的。如果以后有需要,自己也会选择继续使用阿里云的服务器。以后的工作什么遇到有需要的,阿里云服务器也是一个不错的选择。
|
JavaScript 开发工具 数据安全/隐私保护
Node.js学习笔记(二、NPM 使用)
Node.js学习笔记(二、NPM 使用)
197 0
Node.js学习笔记(二、NPM 使用)
斐波那契数列
题目描述 时间限制: 5 Sec 内存限制: 128 MB 小牛:“话说,斐波那契数列1, 1, 2, 3, 5, 8, 13…是一个神奇的数列,它的……” !@#¥%……&(小牛被众人群殴——“就这玩意,谁不懂啊?”) 小牛:“咳咳,这可是我的地盘,听我的!这是一道水题,要求输入正数n,输出相应的第n个(从1计)斐波那契数。
1143 0
|
关系型数据库 MySQL Linux
linux mysql root 忘记密码了,完美解决-费元星站长
修改MySQL的配置文件(默认为/etc/my.cnf),在[mysqld]下添加一行skip-grant-tables   保存配置文件后,重启MySQL服务 service mysqld restart   再次进入MySQL命令行 mysql -uroot -p,输入密码时直接回车,就会进入MySQL数据库了,这个时候按照常规流程修改root密码即可。
3182 0
|
10天前
|
人工智能 自然语言处理 Shell
🦞 如何在 OpenClaw (Clawdbot/Moltbot) 配置阿里云百炼 API
本教程指导用户在开源AI助手Clawdbot中集成阿里云百炼API,涵盖安装Clawdbot、获取百炼API Key、配置环境变量与模型参数、验证调用等完整流程,支持Qwen3-max thinking (Qwen3-Max-2026-01-23)/Qwen - Plus等主流模型,助力本地化智能自动化。
🦞 如何在 OpenClaw (Clawdbot/Moltbot) 配置阿里云百炼 API
|
6天前
|
人工智能 安全 机器人
OpenClaw(原 Clawdbot)钉钉对接保姆级教程 手把手教你打造自己的 AI 助手
OpenClaw(原Clawdbot)是一款开源本地AI助手,支持钉钉、飞书等多平台接入。本教程手把手指导Linux下部署与钉钉机器人对接,涵盖环境配置、模型选择(如Qwen)、权限设置及调试,助你快速打造私有、安全、高权限的专属AI助理。(239字)
3944 11
OpenClaw(原 Clawdbot)钉钉对接保姆级教程 手把手教你打造自己的 AI 助手
|
7天前
|
人工智能 机器人 Linux
保姆级 OpenClaw (原 Clawdbot)飞书对接教程 手把手教你搭建 AI 助手
OpenClaw(原Clawdbot)是一款开源本地AI智能体,支持飞书等多平台对接。本教程手把手教你Linux下部署,实现数据私有、系统控制、网页浏览与代码编写,全程保姆级操作,240字内搞定专属AI助手搭建!
4545 14
保姆级 OpenClaw (原 Clawdbot)飞书对接教程 手把手教你搭建 AI 助手