题解 | #数据流中的中位数#

数据流中的中位数

https://www.nowcoder.com/practice/9be0172896bd43948f8a32fb954e1be1

因为这道题是需要对数据流进行排序,所有用单向链表做题比较方便插入值。只需要记录下链表内已有的个数就可以很方便的得出中位数的值。代码比较简单易懂,欢迎修改。

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param num int整型 
 * @return 无
 */
 typedef struct ChainNode{
    int val;
    struct ChainNode* Next;
 }ChainNode;

static ChainNode* Head;
static int Nnum=0;
void Insert(int num ) {
    ChainNode* NewNode=(ChainNode *)calloc(1,sizeof(ChainNode));
    NewNode->val=num;
    if(Nnum==0)
        Head=NewNode;
    else{
        if(num<Head->val){
            NewNode->Next=Head;
            Head=NewNode;
        }
        else{
            ChainNode* PreNode=Head;
            ChainNode* CurrNode=Head->Next;
            while(CurrNode!=NULL){
                if(num<=CurrNode->val)
                    break;
                PreNode=PreNode->Next;
                CurrNode=CurrNode->Next;
            }
            PreNode->Next=NewNode;
            NewNode->Next=CurrNode;
        }
    }  
    Nnum++;  
}
/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param 无 
 * @return double浮点型
 */
double GetMedian() {
    printf("%d\n",Nnum);
    struct ChainNode* Temp=Head;
    int Index=Nnum/2;
    if(Nnum%2==1){
        for(int i=0;i<Index;i++)
            Temp=Temp->Next;
        return (double)Temp->val;
    }
    else {
        for(int i=0;i<Index-1;i++)
            Temp=Temp->Next;
        return (double)Temp->val/2+(double)Temp->Next->val/2;
    }
    
}

#C##链表#
全部评论

相关推荐

03-29 19:11
门头沟学院 Java
wyp_davis:是可以这样的,不过只要交钱就是假的
点赞 评论 收藏
分享
ALEX_BLX:虽然说聊天记录不可信,不过这个趋势确实如此但我觉得也要想到一点就是卷后端的人里真正有“料”的人又有多少,我说的这个料都不是说一定要到大佬那种级别,而是就一个正常的水平。即使是现在也有很多人是跟风转码的,2-3个月速成后端技术栈的人数不胜数,但今时不同往日没可能靠速成进大厂了。这种情况就跟考研一样,你能上考场就已经打败一半的人了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务