Skip to content

Interval Selection

Table of Contents

452. Minimum Number of Arrows to Burst Balloons

from typing import List


class findMinArrowShots:
    @staticmethod
    def interval_end(points: List[List[int]]) -> int:
        n = len(points)
        if n <= 1:
            return n

        points.sort(key=lambda x: x[1])

        res = 1
        cur = points[0][1]

        for i, j in points[1:]:
            if i > cur:
                res += 1
                cur = j

        return res

    @staticmethod
    def interval_start(points: List[List[int]]) -> int:
        n = len(points)
        if n <= 1:
            return n

        res = 1
        points.sort(key=lambda x: x[0])

        for i in range(1, n):
            if points[i][0] > points[i - 1][1]:
                res += 1
            else:
                points[i][1] = min(points[i][1], points[i - 1][1])
        return res


if __name__ == "__main__":
    points = [[10, 16], [2, 8], [1, 6], [7, 12]]
    assert findMinArrowShots.interval_end(points) == 2
    assert findMinArrowShots.interval_start(points) == 2

757. Set Intersection Size At Least Two