ITKeyword,专注技术干货聚合推荐

注册 | 登录

阿里巴巴 2015 实习笔试题 分布式系统中的RPC请求经常出现乱序的情况 写一个算法来将一个乱序的序列保序输出 - - 博客频道 - CSDN.NET

转载请注明出处:http://blog.csdn.net/tsx86/article/details/44883601分布式系统中的RPC请求经常出现乱序的情况。写一个算法来将一个乱序的序列保序输出。例如,假设起始序号是1,对于(1, 2, 5, 8, 10, 4, 3, 6, 9, 7)这个序列,输出是:123, 4, 567, 8, 9, 10 上述例子中,3到来的时候会发现4,5已经在了。因此将已经满足顺序的整个序列(3, 4, 5)输出为一行。 要求:1. 写一个高效的算法完成上述功能,实现要尽可能的健壮、易于维护2. 为该算法设计并实现单元测试基本思想是将每一行存入一个链表结点,data表示起始数据,len表示每行元素个数。貌似效率不是很高,有时间的时候改进下。struct ListNode

{ int data; int len; ListNode* next;

}; void InsertNode(ListNode *&pHead, ListNode *pNode){ ListNode * pTmp = NULL; if(pNode == NULL) {

cout << "pNode is NULL!" << endl;

return; } if(pHead == NULL) {

pHead = pNode; } else {

for(pTmp = pHead;pTmp->next != NULL; pTmp = pTmp->next)

;

pTmp->next = pNode;

}} void SortAndPrint(int a[], int n){ ListNode *pHead = NULL; ListNode *temp = NULL;

int i = 0; int data = 0; int dataLen = 0; while(i < n) {

int j = 0;

int len = 0;

int moreNum = a[i];

int lessNum = a[i];

//查找小于一个数的连续数出现次数

while(j < i)

{

if(a[j] == lessNum-1)

{

j = 0;

lessNum--;

continue;

}

j++;

}

//只有小于一个数的所有数均出现时才存数据

if(lessNum == 1)

{

j = 0;

while(j < i)

{

if(a[j] == moreNum+1)

{

len++;

moreNum++;

j = 0;

continue;

}

j++;

}

ListNode *p = (ListNode*)malloc(sizeof(ListNode));

memset(p, 0, sizeof(ListNode));

p->data = a[i];

p->len = len;

p->next = NULL;

InsertNode(pHead, p);

}

i++; }

//按顺序打印序列

for(temp=pHead; temp!=NULL; temp=temp->next) {

dataLen = temp->len;

data = temp->data;

while(dataLen)

{

printf("%d,",data++);

dataLen--;

}

printf("%d\n",data); }

//释放资源

ListNode *prev = NULL; ListNode *curr = pHead; while(curr!=NULL) {

prev=curr;

curr=curr->next;

if(prev != NULL)

{

free(prev);

prev = NULL;

} }}

转载请注明出处:http://blog.csdn.net/tsx86/article/details/44883601分布式系统中的RPC请求经常出现乱序的情况。写一个算法来将一个乱序的序列保序输出。例如,假设起始序号是1...

相关阅读排行


用户评论

游客

相关内容推荐

最新文章

×

×

请激活账号

为了能正常使用评论、编辑功能及以后陆续为用户提供的其他产品,请激活账号。

您的注册邮箱: 修改

重新发送激活邮件 进入我的邮箱

如果您没有收到激活邮件,请注意检查垃圾箱。