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]); } }