题解 | #数据流中的中位数#
数据流中的中位数
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##链表#