【leetcode】数据流中的第K大元素

 

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);
}

 

posted @ 2020-09-24 01:13  温暖了寂寞  阅读(189)  评论(0编辑  收藏  举报