题解 | #主持人调度(二)#
主持人调度(二)
https://www.nowcoder.com/practice/4edf6e6d01554870a12f218c94e8a299
typedef struct { int start; int end; } Activity; typedef struct { int start; int end; } Host; int compare(const void* a, const void* b) { return ((Activity*)a)->start > ((Activity*)b)->start; } /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * 计算成功举办活动需要多少名主持人 * @param n int整型 有n个活动 * @param startEnd int整型二维数组 startEnd[i][0]用于表示第i个活动的开始时间,startEnd[i][1]表示第i个活动的结束时间 * @param startEndRowLen int startEnd数组行数 * @param startEndColLen int* startEnd数组列数 * @return int整型 */ int minmumNumberOfHost(int n, int** startEnd, int startEndRowLen, int* startEndColLen ) { // write code here int nHost = 1; Activity* activities = (Activity*)malloc(n * sizeof(Activity)); Host* hosts = (Host*)malloc(n * sizeof(Host)); for (int i = 0; i < n; i++) { activities[i].start = startEnd[i][0]; activities[i].end = startEnd[i][1]; } qsort(activities, n, sizeof(Activity), compare); hosts[0].start = activities[0].start; hosts[0].end = activities[0].end; int end = activities[0].end; for (int i = 1; i < n; i++) { int j = 0; for (j = 0; j < nHost; j++) { if (hosts[j].end <= activities[i].start) { hosts[j].start = activities[i].start; hosts[j].end = activities[i].end; break; } } if (j == nHost) { hosts[nHost].start = activities[i].start; hosts[nHost].end = activities[i].end; nHost++; } } free(activities); free(hosts); return nHost; }