技術メモ

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

leetCode : interval 系の問題

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 すると考えやすくなる。