阿里巴巴_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:
代码还有些要改进的地方,还有我觉得还有更优的算法,欢迎大家提供更多思路。。
分布式系统中的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; }
代码还有些要改进的地方,还有我觉得还有更优的算法,欢迎大家提供更多思路。。
相关文章推荐
- 确认序列号----阿里巴巴2015实习生笔试题
- 阿里巴巴2014实习生测试开发工程师笔试附加题
- 面试----2015阿里巴巴5月校园实习生招聘(笔试、一面、二面+Hr面)
- 以下措施中,不可能改进分布式系统读写(IO)性能的有____----阿里巴巴2015实习生笔试题
- 阿里巴巴2015基础平台研发工程师实习生笔试卷
- 阿里巴巴2015校招笔试附加题2解答
- 阿里巴巴2015研发工程师在线笔试附加题
- 2015阿里巴巴前端实习生在线笔试题
- 在一个元素个数为N的数组里,找到升序排在N/5位置的元素的最优算法时间复杂度是----阿里巴巴2015实习生笔试题
- 阿里巴巴2015算法工程师实习生笔试卷解题分析
- 2015阿里巴巴前端实习生在线笔试题
- 阿里巴巴2015校招笔试题附加题1解答
- 2015阿里巴巴实习生笔试题-不懂的问题
- 2015阿里巴巴实习生笔试题-java
- 阿里巴巴2015算法工程师实习生笔试卷
- 将一个从大到小的数组,用以下排序方法排序成从小到大的,()最快。----阿里巴巴2015实习生笔试题
- 阿里巴巴2015实习生招聘 - 前端笔试题
- 设一棵二叉树中有3个叶子节点,有8个度为1的节点,则该二叉树中总的节点数为?----阿里巴巴2015实习生笔试题
- 2015阿里巴巴前端实习生在线笔试题
- 下面所述步骤中,不是创建进程所必须的步骤是?----阿里巴巴2015实习生笔试题