2016-06-21 80 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

這種方法將工作僅當您使用穩定的排序技術之一否則會弄亂的第一列,當你排序的第二個。

相關問題