LeetCode—406。高さに基づくキューの再構築[高さによるキューの再構築] —分析とコード[Java]
1.タイトル
無秩序な順序で立っている人々のグループがあると仮定します。各人は整数のペア(h、k)で表されます。ここで、hは人の身長、kはこの人の前にランク付けされ、身長がh以上の人の数です。このキューを再構築するアルゴリズムを記述します。
注:
総人数は1100人未満です。
例
输入:
[[7,0], [4,4], [7,1], [5,0], [6,1], [5,2]]
输出:
[[5,0], [7,0], [5,2], [6,1], [4,4], [7,1]]
出典:LeetCode(LeetCode)
リンク:https://leetcode-cn.com/problems/queue-reconstruction-by-height
著作権はLeetCodeが所有しています。商用の再版については、公式の承認に連絡してください。非商用の再版については、出典を示してください。
2、分析とコード
1.欲張りアルゴリズム
(1)考える
低い人は背の高い人には「見えない」ので、つまり、低い人の位置は背の高い人のkに影響を与えません。高さhの数には制限があるため、最も背の高い人から始めて、各高さの人を高から低のk番目の位置に挿入して並べ替えを完了することができます。
具体的な実装手順は次のとおりです
。1)すべての人を高さhでグループ化し、各グループ内でkで並べ替えます
。2)hが最も高いグループから開始し、各グループのk番目の位置にメンバーを挿入します。
(2)コード
class Solution {
public int[][] reconstructQueue(int[][] people) {
Arrays.sort(people, new Comparator<int[]>() {
@Override
public int compare(int[] p1, int[] p2) {
return p1[0] == p2[0] ? p1[1] - p2[1] : p2[0] - p1[0];
}
});
List<int[]> ans = new LinkedList<>();
for (int[] p : people) {
ans.add(p[1], p);
}
int len = people.length;
return ans.toArray(new int[len][2]);
}
}
(3)結果
実行時間:10ミリ秒、
すべてのJava送信でユーザーの63.37%を上回っています。メモリ消費量:40.8 MB、すべてのJava送信でユーザーの38.40%を上回っています。
3、その他
何もありません。