2016-06-21 43 views
1

给出一个字符串数组作为输入。 每个字符串是以下格式的:基于某些条件对字符串数组进行多级排序

{名字} {空格字符} {罗马数字}

阵列具有被排序第一基于所述名称,如果名字是相同的,那么上罗马数字的基础。

例如

输入 - [ “菲利普IV”, “菲利普II”, “约翰X”]

输出 - [ “约翰X”, “菲利普II”, “菲利普IV”]

另一个变体: 字符串数组包含一些重复项。数组必须根据字符串出现次数降序排列,如果两个或更多字符串的出现次数相同,则根据反向字典顺序对它们进行排序。

例如

输入 - [ “ABC”, “ABC”, “XYZ”, “XYZ”, “PQR”, “PQR”, “PQR”]

输出 - [ “PQR”, “XYZ”, “abc”]

在这里和那里的一些变化的采访中,这个问题已经出现了很多次。两者都与多级排序有关。

我只能用蛮力的方法。

对于第一个,创建一个罗马数字的排序映射,并用它来实现一个比较器,它将处理名和罗马数字。

对于第二个,创建一个字符串及其出现的映射,并用它来实现一个比较器。

有没有更好的方法来解决这些问题?任何帮助将不胜感激。

+1

到目前为止你做了什么? –

+0

如果我理解你对你的尝试的描述,它确实看起来像是适当的解决方案。人们可能会弄乱诸如时间复杂性(即主要用于Java集合的数据类型)和其他性能相关方面(罗马数字转换器或事件映射的多线程初始化等)等细节,但我无法真正了解只用Java框架本身就可以看到另一个简单的解决方案 – Mena

+0

此外,问题的+1,但投票结束为“太宽泛”。 – Mena

回答

0

它可以通过排序名称,然后罗马计数来解决。

enter image description here

这种方法将工作仅当您使用稳定的排序技术之一否则会弄乱的第一列,当你排序的第二个。

相关问题