您的位置:首页 > 其它

阿里巴巴_2015_04_02 实习生笔试附加题三

2015-04-03 11:34 357 查看
附加题三:

分布式系统中的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)为该算法设计并实现单元测试

--------------------------------------------------------------------------------------------------------------------------------------------

算法思路(自己的思路)



程序如下(程序里的有些变量可能和上面算法描述中的不一致):

edition one:

struct node
{
int value;
bool visit;
};
void print_seq(int seq[], int len)
{
vector<node>  node(len + 1);
int i = 0;
for (i = 0; i <len; i++)
{
node[seq[i]].value = i;
node[seq[i]].visit = false;
}
for (i = 0; i <= len; i++)
{
cout << node[i].value << "--";
}
cout << endl;
int j = 0;
int k = 0;
int next_print = 1;
for (j = 0; j < len; j++)
{
node[seq[j]].visit = true;
if (seq[j] == next_print)
{
cout << seq[j];
for (k = next_print + 1; k <= len; ++k)
{
if (node[k].visit == false)
{
cout << endl;
break;
}
else
cout << "," << k;
}
next_print = k;
}
}
}

int main(int argc, char *argv[])
{
int test[] = {2, 5, 8,1, 10, 4, 3, 6, 9, 7 };
int len = sizeof(test) / sizeof(test[0]);
print_seq(test, len);
return 0;
}


代码还有些要改进的地方,还有我觉得还有更优的算法,欢迎大家提供更多思路。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: