leetCode の「452. Minimum Number of Arrows to Burst Balloons」を解いた。
https://leetcode.com/problems/minimum-number-of-arrows-to-burst-balloons/
この問題は、苦手な interval 系なので、今後の参考のために、解答をここに残しておく。
public int findMinArrowShots(int[][] points) { if (points == null || points.length == 0) { return 0; } // 例えば、a[1] > b[1] の時、右辺は 1 を返す。 // 右辺が 1 を返す場合、左辺は b -> a という順番になるべき、ということ。 // つまり、このラムダ式は、points[x][1] の昇順でソートするものである。 Arrays.sort(points, (a, b) -> Integer.compare(a[1], b[1])); int arrowPos = points[0][1]; int arrowCount = 1; for (int i = 1; i < points.length; i++) { int startPos = points[i][0]; if (startPos <= arrowPos) { continue; } arrowCount++; arrowPos = points[i][1]; } return arrowCount; }
上記の解答コードの通り、interval 系の問題では、interval の start か end で sort すると考えやすくなる。