LeetCode—406。高さによるキューの再構築—分析とコード(Java)

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、その他

何もありません。

おすすめ

転載: blog.csdn.net/zml66666/article/details/103431358