嘿伙计们,如果我有一个看起来像[A,B,C,A,B,C,A,C,B](随机顺序)的数组,我希望将它安排到[A,A, A,B,B,B,C,C,C](每个组在一起),允许的唯一操作是: 1)查询数组的第i项 2)交换数组中的两个项目。
如何设计在O(n)中完成工作的算法?
谢谢!
答案 0 :(得分:1)
排序算法不再是你设计新鲜的东西(即你的开发过程的第一步);您应该研究已知的sort algorithms,看看哪些符合您的需求。
(当然,您可能真的需要自己的新排序算法,但通常具有不同且具有高度特异性的requirements。)
如果这不是你的第一步(但我不认为是这种情况),那么知道你已经尝试过什么以及它是如何失败将会有所帮助。
答案 1 :(得分:1)
这实际上只是counting sort。
扫描阵列一次,计算As,Bs,Cs的数量 - 这应该会给你一个想法。这变得像bucket sort - 不完全是这样的。 As Bs和Cs的计数应该让你知道As,Bs和Cs的字符串属于哪里。