题解 | #活动安排#贪心

活动安排

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

这个问题可以使用贪心算法来解决。首先,我们需要将所有活动按照结束时间从小到大进行排序,然后选择结束时间最早的活动。接下来,我们遍历其他活动,如果开始时间晚于上一个已选择的活动的结束时间,我们就选择该活动并更新上一个已选择活动的结束时间。最后,返回已选择的活动数即可。

以下是c++代码

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

struct Activity {
    int start;
    int end;
};

bool compare(Activity a, Activity b) {
    return a.end < b.end;
}

int maxActivities(vector<Activity>& activities) {
    int count = 1; // 至少有一个活动可以选择
    int prevEnd = activities[0].end;

    for (int i = 1; i < activities.size(); i++) {
        if (activities[i].start >= prevEnd) {
            count++;
            prevEnd = activities[i].end;
        }
    }

    return count;
}

int main() {
    int n;
    cin >> n;
    vector<Activity> activities(n);
    for (int i = 0; i < n; i++) {
        cin >> activities[i].start >> activities[i].end;
    }

    sort(activities.begin(), activities.end(), compare);

    int maxCount = maxActivities(activities);
    cout << maxCount << endl;

    return 0;
}

全部评论

相关推荐

2 收藏 评论
分享
牛客网
牛客企业服务