zl程序教程

您现在的位置是:首页 >  其它

当前栏目

703. 数据流中的第 K 大元素

元素 数据流
2023-09-14 09:06:53 时间

703. 数据流中的第 K 大元素

设计一个找到数据流中第 k 大元素的类(class)。注意是排序后的第 k 大元素,不是第 k 个不同的元素。

请实现 KthLargest 类:

KthLargest(int k, int[] nums) 使用整数 k 和整数流 nums 初始化对象。
int add(int val) 将 val 插入数据流 nums 后,返回当前数据流中第 k 大的元素。

示例:

输入:
[“KthLargest”, “add”, “add”, “add”, “add”, “add”]
[[3, [4, 5, 8, 2]], [3], [5], [10], [9], [4]]
输出:
[null, 4, 5, 5, 8, 8]

解释:
KthLargest kthLargest = new KthLargest(3, [4, 5, 8, 2]);
kthLargest.add(3); // return 4
kthLargest.add(5); // return 5
kthLargest.add(10); // return 5
kthLargest.add(9); // return 8
kthLargest.add(4); // return 8

typedef struct {
    struct KthLargest *next;
    int val

} KthLargest;


KthLargest* kthLargestCreate(int k, int* nums, int numsSize) {
    KthLargest *l=(KthLargest*)malloc(sizeof(KthLargest));
    l->val=k;
    l->next=NULL;
    int i;
    for(i=0;i<numsSize;i++){
          KthLargest *p=(KthLargest*)malloc(sizeof(KthLargest));
          p->val=nums[i];
         KthLargest *pre=l,*s=l->next;
        if(i==0){
            p->next=l->next;
            l->next=p;

        }
        else{
         

            while(s){
                if(s->val>=nums[i]){break;}
                pre=s;
                s=s->next;
            }
         p->next=s;
            pre->next=p;
        }
           

    }
    return l;



}

int kthLargestAdd(KthLargest* obj, int val) {
     KthLargest *pre=obj,*s=obj->next;
       KthLargest *p=(KthLargest*)malloc(sizeof(KthLargest));
          p->val=val;

            while(s){
                if(s->val>=val){break;}
                pre=s;
                s=s->next;
            
        }
             p->next=s;
            pre->next=p;
        int i=1;
        s=obj->next;
        while(i<=obj->val-2){
            s=s->next;

            i++;
        }
         KthLargest *t=s->next;
        s->next=t->next;
         s=obj->next;
         while(s){
             printf("%d ",s->val);
             s=s->next;
         }
         printf("|");
        return t->val;




}

void kthLargestFree(KthLargest* obj) {

}

/**
 * Your KthLargest struct will be instantiated and called as such:
 * KthLargest* obj = kthLargestCreate(k, nums, numsSize);
 * int param_1 = kthLargestAdd(obj, val);
 
 * kthLargestFree(obj);
*/