技術メモ

神奈川在住のITエンジニアの備忘録。おもにプログラミングやネットワーク技術について、学んだことを自分の中で整理するためにゆるゆると書いています。ちゃんと検証できていない部分もあるのでご参考程度となりますが、誰かのお役に立てれば幸いです。

leetCode:406. Queue Reconstruction by Height

leetCodeの「406. Queue Reconstruction by Height」を解いた。
https://leetcode.com/problems/queue-reconstruction-by-height/

この問題では、二次元配列のソートや、List から int 配列への変換など、競技プログラミングに使えそうなテクニックが満載だったので、今後の参考のためここに解答を残しておく。

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class Solution {
    public int[][] reconstructQueue(int[][] people) {
        // people は以下のような二次元配列。
        // [
        //  [7,0],
        //  [4,4],
        //  [7,1],
        //  ...
        // ]
        //
        // people[x][0] が一緒だったら people[x][1] の昇順でソート。people[x][0] が異なれば people[x][0] の降順でソート。
        Arrays.sort(people, (a, b) -> a[0] == b[0] ? a[1] - b[1] : b[0] - a[0]);

        List<int[]> ans = new ArrayList<>();
        for (int[] person : people) {
            ans.add(person[1], person);
        }

        // List<int[]> を int[people.length][2] の配列に変換。
        return ans.toArray(new int[people.length][2]);
    }
}