typedef struct {
int k;
int* nums;
} KthLargest;
int cmp(const void* a, const void* b){
return *(int*)b - *(int*)a;
}
KthLargest* kthLargestCreate(int k, int* nums, int numsSize) {
KthLargest* obj = (KthLargest*)malloc(sizeof(KthLargest));
obj->k=k;
obj->nums = (int*)calloc(k,sizeof(int));
if(numsSize)
{
qsort(nums,numsSize,sizeof(int),cmp);
memcpy(obj->nums,nums,((numsSize<k)?numsSize:k)*sizeof(int));
}
if(numsSize < obj->k) obj->nums[obj->k-1] = -2147483648;
return obj;
}
int kthLargestAdd(KthLargest* obj, int val) {
for (int i=obj->k-1; i>=0; i--)
{
if (val > obj->nums[i])
{
if(i != obj->k-1)
obj->nums[i+1] = obj->nums[i];
obj->nums[i]=val;
}
else
break;
}
return obj->nums[obj->k-1];
}
void kthLargestFree(KthLargest* obj) {
free(obj);
}