题解 | 活动安排(经典贪心)

活动安排

https://www.nowcoder.com/practice/16d971e9e42e4f3b9b1e2b8794796a43

#牛客春招刷题训练营# + 链接

通过优先选择结束时间最早且与前一个选定活动不冲突的活动,来最大化可以安排的活动数量。

1.将所有活动按结束时间升序排序。

2.遍历每个活动,对于一个活动,如果它的开始时间晚于或等于上一个选中活动的结束时间,则安排此活动。

复杂度:时间复杂度O(nlogn),空间复杂度O(n)。

#include <algorithm>
#include <bits/stdc++.h>
using namespace std;

using PII = pair<int,int>;
const int MAXN=200010;
PII a[MAXN];

bool cmp(const PII& p, const PII& q) {
    return p.second<q.second;
}

int main() {
    int n;
    scanf("%d", &n);
    for (int i=1;i<=n;i++) {
        scanf("%d%d", &a[i].first, &a[i].second);
    }
    sort(a+1,a+n+1,cmp);
    int ans=0, pre=-1;
    for (int i=1;i<=n;i++) {
        if (a[i].first>=pre) {
            ++ans;
            pre = a[i].second;
        }
    }
    printf("%d\n", ans);
    return 0;
}

全部评论

相关推荐

在看数据的傻狍子很忙碌:学生思维好重,而心很急,自己想想真的能直接做有难度的东西吗?任何错误都是需要人担责的,你实习生可以跑路,你的同事领导呢
点赞 评论 收藏
分享
你背过凌晨4点的八股文么:简历挂了的话会是流程终止,像我一样
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务