【问题标题】:Multilevel sorting of an array of strings based on some conditions基于某些条件的字符串数组的多级排序
【发布时间】:2016-06-21 11:32:25
【问题描述】:

一个字符串数组作为输入。 每个字符串的格式如下:

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

数组必须先按名称排序,如果名称相同,则按罗马数字排序。

例如

输入 - ["Philip IV", "Philip II", "John X"]

输出 - ["John X", "Philip II", "Philip IV"]

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

例如

输入 - ["abc", "abc", "xyz", "xyz", "pqr", "pqr", "pqr"]

输出 - ["pqr", "xyz", "abc"]

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

我只能想出一种蛮力方法。

对于第一个,为罗马数字创建一个排序映射,并使用它来实现一个比较器,该比较器将处理名字,然后是罗马数字。

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

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

【问题讨论】:

  • 到目前为止你做了什么?
  • 如果我理解您对您所尝试的内容的描述,它确实看起来是合适的解决方案。人们可能会摆弄诸如时间复杂度(即主要用于 Java 集合的数据类型)和其他与性能相关的方面(罗马数字转换器的多线程初始化或出现映射等)等细节,但我真的不能查看另一个仅使用 Java 框架本身的简单解决方案。
  • 另外,为这个问题 +1,但投票结束时“过于宽泛”。
  • “蛮力方法”是什么意思?使用集合和比较器进行排序使用基于分治的优化合并排序算法。这可能是最快和最稳定的方式。查看 Oracle 文档docs.oracle.com/javase/tutorial/collections/algorithms
  • @JohnnyWiller:我已经尝试过上述方法。只是想知道是否有可能以更好的方式做到这一点。

标签: java arrays string sorting


【解决方案1】:

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

这种方法只有在您使用一种稳定的排序技术时才有效,否则当您对第二列进行排序时,它会弄乱第一列。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多