『每日一题』
题目取自清华大学《数据结构》题集,严蔚敏,米宁, 吴伟民
荷兰国旗问题:(难度5)设有一个仅由红白蓝三种颜色的条块组成的条块序列。求一种时间复杂度O(n)的算法,使得这些条块按红、白、蓝的顺序排好,即排成荷兰国旗的图案。
分析:大意是比如{红,蓝,白,白,蓝,红,白,蓝,白} -->{红,红,蓝,蓝,蓝,白,白,白,白}的调整
不过该题目并未规定是否可以另辟存储空间。
有兴趣的试试看吧。
『题解』:
其实此题并不难,如果一开始没有思路,可以先降级考虑一下两色旗问题,相信可以很快用分别指向队头和队尾两个的指针平行移动来调整序列内元素,算法复杂度是O(n)。然后考虑多了一种颜色,就是加了一个指针而已,算法复杂度不受影响。
该实现不用另辟array空间。需要额外几个指针。
荷兰国旗问题解析
本文介绍了一个经典的编程问题——荷兰国旗问题,并提供了一种O(n)时间复杂度的解决方案。通过使用三个指针来分别标记红、白、蓝三种颜色的位置,实现了在原地将序列中的元素按颜色顺序排列。
3097

被折叠的 条评论
为什么被折叠?



