字符串数组作为输入给出。
每个字符串具有以下格式:

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

必须首先根据名称对数组进行排序,如果名称相同,则根据罗马数字进行排序。

例如

输入-[“ Philip IV”,“ Philip II”,“ John X”]

输出-[“ John X”,“ Philip II”,“ Philip IV”]

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

例如

输入-[“ abc”,“ abc”,“ xyz”,“ xyz”,“ pqr”,“ pqr”,“ pqr”]

输出-[“ pqr”,“ xyz”,“ abc”]

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

我只能提出一种蛮力的方法。

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

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

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

最佳答案

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

java - 根据某些条件对字符串数组进行多级排序-LMLPHP

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

07-26 05:32
查看更多