一位活动主持人在同一时间只能参与一个活动。并且活动主持人需要全程参与活动,换句话说,一个主持人参与了第 i 个活动,那么该主持人在 (starti,endi) 这个时间段不能参与其他任何活动。求为了成功举办这 n 个活动,最少需要多少名主持人。
数据范围: ,
复杂度要求:时间复杂度 ,空间复杂度
2,[[1,2],[2,3]]
1
只需要一个主持人就能成功举办这两个活动
2,[[1,3],[2,4]]
2
需要两个主持人才能成功举办这两个活动
在int范围内
void swap(int* a, int* b) { int temp = *a; *a = *b; *b = temp; } int partition(int** arr, int left, int right, int part) { int pivot = arr[right][part]; int i = left - 1; for (int j = left; j < right; j++) { if (arr[j][part] < pivot) { i++; swap(&arr[i][part], &arr[j][part]); } } swap(&arr[i + 1][part], &arr[right][part]); return i + 1; } void quicksort(int** arr, int left, int right, int part) { if (left < right) { int pivot = partition(arr, left, right, part); quicksort(arr, left, pivot - 1, part); quicksort(arr, pivot + 1, right, part); } } int minmumNumberOfHost(int n, int** startEnd, int startEndRowLen, int* startEndColLen ) { int i, j; for(i = 0; i < n/2; i++) { if(memcmp(startEnd[2*i], startEnd[2*i+1], 2*sizeof(int))!=0) { quicksort(startEnd, 0, n-1, 0); quicksort(startEnd, 0, n-1, 1); break; } } for (i = 1, j = 0; i < n; i++) { if (startEnd[i][0] >= startEnd[j][1]) j++; } return i-j; }
/** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * 计算成功举办活动需要多少名主持人 * @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整型 * * C语言声明定义全局变量请加上static,防止重复定义 */ long long compare(const void *a,const void *b){ return *(long long*)a-*(long long*)b; } int minmumNumberOfHost(int n, int** startEnd, int startEndRowLen, int* startEndColLen ) { // write code here //辅助数组分别获得开始和结束时间 long long*Start=(long long*)malloc(sizeof(long long)*n),*End=(long long*)malloc(sizeof(long long)*n); for(int i=0;i<n;i++){ Start[i]=startEnd[i][0]; End[i]=startEnd[i][1]; } //对开始时间和结束时间分别排序 qsort(Start,n,sizeof(long long),compare); qsort(End,n,sizeof(long long),compare); //判断活动开始时间是否晚于前一个活动 int j=0,res=0; for(int i=0;i<n;i++){ if(Start[i]>=End[j]) j++; else res++; } printf("%d",sizeof(short)); return res; }为什么这个只能通过80%呢?