列表

详情


NC383. 主持人调度(一)

描述

有 n 个活动即将举办,每个活动都有开始时间与活动的结束时间,第 i 个活动的开始时间是 starti ,第 i 个活动的结束时间是 endi ,举办某个活动就需要为该活动准备一个活动主持人。

一位活动主持人在同一时间只能参与一个活动。并且活动主持人需要全程参与活动,换句话说,一个主持人参与了第 i 个活动,那么该主持人在 (starti,endi) 这个时间段不能参与其他任何活动。请问一个只有一个主持人能否举办全部活动。

数据范围:

示例1

输入:

[[0,10],[10,20],[20,30]]

输出:

true

示例2

输入:

[[0,10],[10,20],[15,30]]

输出:

false

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++ 解法, 执行用时: 72ms, 内存消耗: 11392KB, 提交时间: 2022-07-09

static const auto io_sync_off = [](){
    std::ios::sync_with_stdio(false);
    std::cout.tie(nullptr);
    std::cin.tie(nullptr);
    return nullptr;
}();
class Solution {
public:
    static bool cmp(vector<int>& a,vector<int>& b)
    {
        return a[0]<b[0];
    }
    bool hostschedule(vector<vector<int> >& schedule) {
        if(schedule.size()==1)
            return true;
        sort(schedule.begin(),schedule.end(),cmp);
        vector<vector<int>>res;
        int t=schedule[0][1];
        for(int i=1;i<schedule.size();i++)
        {
            if(schedule[i][0]<t)
                return false;
            else t=schedule[i][1];
        }
        return true;
    }
};

C 解法, 执行用时: 83ms, 内存消耗: 9580KB, 提交时间: 2022-04-09

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param schedule int整型二维数组 
 * @param scheduleRowLen int schedule数组行数
 * @param scheduleColLen int* schedule数组列数
 * @return bool布尔型
 *
 * C语言声明定义全局变量请加上static,防止重复定义

*/

typedef struct{
    int start;
    int end;
}Time;

int cmp(const void*a, const void *b)
{
    Time *x = (Time*)a;
    Time *y = (Time*)b;
    return x->start - y->start;
}

bool hostschedule(int** schedule, int scheduleRowLen, int* scheduleColLen ) {
    // write code here
    * scheduleColLen = 2;
    Time *tmp = (Time *)malloc(sizeof(Time) *scheduleRowLen);
    for(int i = 0; i < scheduleRowLen;i++){
       tmp[i].start = schedule[i][0];
       tmp[i].end = schedule[i][1];
    }
    qsort(tmp, scheduleRowLen, sizeof(Time), cmp);
    
    for(int i =0; i < scheduleRowLen; i++){
       // printf("%d %d\n", tmp[i].start,tmp[i].end);
        if(i + 1 >= scheduleRowLen){
            break;
        }
        if(tmp[i].end > tmp[i+1].start){
            return false;
        }
    }
    return true;
}

C 解法, 执行用时: 84ms, 内存消耗: 9516KB, 提交时间: 2022-07-18

typedef struct {
    int start;
    int end;
} Time;

int cmp(const void* a, const void* b) {
    Time* x = (Time*)a;
    Time* y = (Time*)b;
    return x->start - y->start;
}

bool hostschedule(int** schedule, int scheduleRowLen, int* scheduleColLen ) {
    * scheduleColLen = 2;
    Time* t = (Time*)malloc(sizeof(Time) * scheduleRowLen);
    for (int i = 0; i < scheduleRowLen; i++) {
        t[i].start = schedule[i][0];
        t[i].end = schedule[i][1];
    }
    qsort(t, scheduleRowLen, sizeof(Time), cmp);
    for (int i = 0; i < scheduleRowLen; i++) {
        if (i + 1 >= scheduleRowLen) {
            break;
        }
        if (t[i].end > t[i + 1].start) {
            return false;
        }
    }
    return true;
}

C 解法, 执行用时: 84ms, 内存消耗: 9580KB, 提交时间: 2022-06-16

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param schedule int整型二维数组 
 * @param scheduleRowLen int schedule数组行数
 * @param scheduleColLen int* schedule数组列数
 * @return bool布尔型
 *
 * C语言声明定义全局变量请加上static,防止重复定义
 */
#include <stdbool.h>

int cmp(const void *a, const void *b) {
    return (**(int **)(a)) - (**(int **)(b));    
}

void quickSort(int** schedule, int start, int end) {
    if (start < end) {
        int *target = schedule[start], i = start, j = end, flag = 1;
        while(i < j) {
//             while(i < j && (schedule[j][0] > target[0] || (schedule[j][0] == target[0] && flag == 1))) {
//                 if(schedule[j][0] == target[0]) {
//                     flag = 0;
//                 }
            while(i < j && schedule[j][0] > target[0]) {
                j--;
            }
            if(i < j) {
                schedule[i++] = schedule[j];
            }
//             while(i < j && (schedule[i][0] < target[0] || (schedule[i][0] == target[0] && flag == 0))) {
//                 if(schedule[i][0] == target[0]) {
//                     flag = 1;
//                 }
            while(i < j && schedule[i][0] <= target[0]) {
                i++;
            }
            if(i < j) {
                schedule[j--] = schedule[i];
            }
        }
        schedule[i] = target;
        
        quickSort(schedule, start, i - 1);
        quickSort(schedule, i + 1, end);
    }
}

bool hostschedule(int** schedule, int scheduleRowLen, int* scheduleColLen ) {
    if (scheduleRowLen <= 1) {
        return true;
    }
    
    qsort(schedule, scheduleRowLen, sizeof(int) * (*scheduleColLen), cmp);
    
    //quickSort(schedule, 0, scheduleRowLen - 1);
    
    for (int i = 0; i < scheduleRowLen - 1; i++) {
        if (schedule[i+1][0] < schedule[i][1]) {
            return false;
        }
    }
    
    return true;
}


C 解法, 执行用时: 88ms, 内存消耗: 9496KB, 提交时间: 2022-05-05

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param schedule int整型二维数组 
 * @param scheduleRowLen int schedule数组行数
 * @param scheduleColLen int* schedule数组列数
 * @return bool布尔型
 *
 * C语言声明定义全局变量请加上static,防止重复定义
 *
 * C语言声明定义全局变量请加上static,防止重复定义
 */
static void quickSort(int** schedule, int start, int end) {
    if (start >= end) return;
    int i = start;
    int j = end;
    int pivot = schedule[i][0];
    
    while (i < j) {
        while (schedule[j][0] > pivot && j > i) --j;
        while (schedule[i][0] <= pivot && i < j) ++i;
        
        if (i < j) {
            int tmp1 = schedule[j][0];
            int tmp2 = schedule[j][1];
            schedule[j][0] = schedule[i][0];
            schedule[j][1] = schedule[i][1];
            schedule[i][0] = tmp1;
            schedule[i][1] = tmp2;
        }
    }
    
    int tmp1 = schedule[j][0];
    int tmp2 = schedule[j][1];
    schedule[j][0] = schedule[start][0];
    schedule[j][1] = schedule[start][1];
    schedule[start][0] = tmp1;
    schedule[start][1] = tmp2;
    
    quickSort(schedule, start, j-1);
    quickSort(schedule, j+1, end);
}

static int cmp2(const void* a, const void* b) {
    int** tmp1 = (int**)a;
    int** tmp2 = (int**)b;
    return (*tmp1[0] - *tmp2[0]);
}

int hostschedule(int** schedule, int scheduleRowLen, int* scheduleColLen ) {
    // write code here
//     quickSort(schedule, 0, scheduleRowLen-1);
    qsort(schedule, scheduleRowLen, sizeof(schedule[0]), cmp2);
    
    int arr[12][2];
    int j;
    for (j = 0; j < 12; j++) {
        arr[j][0] = schedule[j][0];
        arr[j][1] = schedule[j][1];
    }
    int i;    
    for (i = 1; i < scheduleRowLen; i++) {
        if (schedule[i][0] < schedule[i-1][1]) return 0;
    }
    return 1;
}

上一题