int CmpInt(const void* a, const void* b) { return *(int*)b - *(int*)a; // 升序排列 }
typedef struct { int id; int rating; }NodeInfor;
int minSetSize(int* arr, int arrSize) { int * cntList = 0; int cntNum = 0; int rtVal = 0; int i = 0; int cnt = 0; int preVal = 0;
qsort(arr, arrSize, sizeof(int), CmpInt);
cntList = malloc(sizeof(int) * arrSize);
preVal = arr[0]; cnt = 1; for(i = 1; i < arrSize; i++) { if(arr[i] == preVal) { cnt++; } else { cntList[cntNum++] = cnt; cnt = 1; }
preVal = arr[i]; } cntList[cntNum++] = cnt;
qsort(cntList, cntNum, sizeof(int), CmpInt);
cnt = 0; for(i = 0; i < cntNum; i++) { cnt += cntList[i]; if(cnt >= (arrSize / 2)) { break; } }
rtVal = i + 1;
free(cntList); return rtVal; }