一位活动主持人在同一时间只能参与一个活动。并且活动主持人需要全程参与活动,换句话说,一个主持人参与了第 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%呢?