【发布时间】:2014-10-28 22:16:09
【问题描述】:
这是一项奖励学校任务,我们还没有接受任何教学,我也不是在寻找完整的代码,但是一些开始的提示会很酷。当我回到家时,我会发布我迄今为止在 Java 中所做的事情,但这是我已经完成的事情。
所以,我们必须做一个排序算法,例如将“AAABBB”排序到 ABABAB。最大输入大小为 10^6,这一切都必须在 1 秒内完成。如果有多个答案,按字母顺序排列的第一个是正确的。我开始测试不同的算法,甚至在没有考虑字母顺序要求的情况下对它们进行排序,只是为了看看结果如何。
第一版:
将 ascii 代码保存到 Integer 数组,其中 index 是 ascii 代码,值是该字符在 char 数组中出现的数量。 然后我选择了 2 个最高的数字,并开始将它们一个接一个地发送到新的字符数组,直到某个数字更高,然后我换到它。效果很好,但是顺序当然不对。
第二版:
遵循相同的想法,但不再选择出现次数最多的数字,而是按照它们在我的数组中的顺序选择索引。在输入类似于 CBAYYY 之前运行良好。算法将其排序为 ABCYYY 而不是 AYBYCY。当然,我可以尝试为那些 Y 找到一些空闲位置,但那时它开始花费太长时间。
【问题讨论】:
-
我会说你绝对必须首先计算每个字符。 (如果一个字符的长度超过 2,你也可以停在那里,因为不存在有效的解决方案。)
-
请正式定义任务更好,你的例子还不够。另外 - 你的字母表大小是多少?
-
“排序”一个字符数组,因此彼此之间没有相同的字符 - 这是不是排序,而是重新排列。误导性标题。排序会将相同的字符放在一起。
-
@icza 由于决胜局是按字母顺序排列的,因此也涉及到排序。
标签: java arrays algorithm sorting