阿里15实习生招聘笔试 字符保序输出问题

来源:互联网 发布:淘宝网站的目标客户是 编辑:程序博客网 时间:2024/04/28 11:49

题目:

分布式系统中的RPC请求经常出现乱序的情况。
写一个算法来将一个乱序的序列保序输出。例如,假设起始序号是1,对于(1, 2, 5, 8, 10, 4, 3, 6, 9, 7)这个序列,输出是:
1
2
3, 4, 5
6
7, 8, 9, 10
 
上述例子中,3到来的时候会发现4,5已经在了。因此将已经满足顺序的整个序列(3, 4, 5)输出为一行。
 
要求:
1. 写一个高效的算法完成上述功能,实现要尽可能的健壮、易于维护
2. 为该算法设计并实现单元测试


#include<iostream>
#include<vector>
using namespace std;
class Queue
{
public:
int val;
int num;
Queue()
{
num = 0;
val = 0;
}
};
int main()
{
vector<Queue> queue;
int temp,num=0;
do                                                                 //接收输入,作为无序序列
{
cin >> temp;
Queue * p = new Queue;
p->val = temp;
p->num = ++num;
queue.push_back(*p);
if (cin.get() == '\n')
break;
} while (1);
vector<Queue> cpy;                                 //拷贝一份
for (auto i : queue)
cpy.push_back(i);
for (auto begin = cpy.begin(), end = cpy.end(); begin != end;--end)                   //冒泡排序
{
for (auto it = begin; it != (end-1); ++it)
{
if (it->val > (it + 1)->val)
{
Queue * p = new Queue;
p->num = it->num;
p->val = it->val;
it->num = (it + 1)->num;
it->val = (it + 1)->val;
(it + 1)->num = p->num;
(it + 1)->val = p->val;
}
}
}
temp = 1;
for (auto i : cpy)                                   //保序输出
{
if (i.num <= temp)                              //若当前数字编号小于输出的最大编号,则直接输出不需换行
cout << i.val << " ";
else                                                      //否则当前编号成为最大编号,并且换行
{
temp = i.num;
cout << endl;
cout << i.val << " ";
}
}
}


0 0
原创粉丝点击