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

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

牛客对应题目链接:活动安排_牛客题霸_牛客网 (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 排序还不够熟悉,需要多尝试不同写法并牢记。


相关文章
|
7月前
|
存储 人工智能 算法
三维数组解决问题案例(天梯赛座位分配)
三维数组解决问题案例(天梯赛座位分配)
88 0
|
7月前
|
存储
【错题集-编程题】组队竞赛(排序 + 贪心)
【错题集-编程题】组队竞赛(排序 + 贪心)
|
7月前
|
调度
【错题集-编程题】主持人调度(一)(排序)
【错题集-编程题】主持人调度(一)(排序)
|
7月前
|
调度 容器
【错题集-编程题】主持人调度(二)(贪心 + 优先级队列)
【错题集-编程题】主持人调度(二)(贪心 + 优先级队列)
|
7月前
蓝桥杯省赛冲刺(1 补充)考试流程 做题技巧 手算题 杂题
蓝桥杯省赛冲刺(1 补充)考试流程 做题技巧 手算题 杂题
34 0
|
7月前
|
存储 算法 Java
【算法设计与分析】— —实现活动安排问题的贪心算法。
【算法设计与分析】— —实现活动安排问题的贪心算法。
|
算法
秒懂算法 | 活动安排问题贪心算法
通过例子分析求解活动安排问题的最好贪心策略、展示按照贪心策略求解该问题的过程。
479 0
秒懂算法 | 活动安排问题贪心算法
【短学期算法作业】团伙问题(并查集)
【短学期算法作业】团伙问题(并查集)
【短学期算法作业】团伙问题(并查集)
【短学期算法作业】八皇后问题(回溯法)
【短学期算法作业】八皇后问题(回溯法)
【短学期算法作业】八皇后问题(回溯法)
|
机器学习/深度学习 机器人 API
【蓝桥杯省赛】冲刺练习题【经典题目练习】倒计时【01】天(准考证组委会已下发,请查询)-1
【蓝桥杯省赛】冲刺练习题【经典题目练习】倒计时【01】天(准考证组委会已下发,请查询)
115 0
【蓝桥杯省赛】冲刺练习题【经典题目练习】倒计时【01】天(准考证组委会已下发,请查询)-1