Untitled

 avatar
unknown
plain_text
25 days ago
900 B
1
Indexable
// T.C : O(nlogn)
// S.C : O(1)
class Solution {
    public int findMinArrowShots(int[][] points) {
        int n = points.length;
        Arrays.sort(points, Comparator.comparingInt(a -> a[0]));
        
        int[] prev = points[0];
        int count = 1;
        
        for (int i = 1; i < n; i++) {
            int currStartPoint = points[i][0];
            int currEndPoint = points[i][1];
            
            int prevStartPoint = prev[0];
            int prevEndPoint = prev[1];
            
            if (currStartPoint > prevEndPoint) { // no overlap
                count++;
                prev = points[i];
            } else {
                // overlap
                prev[0] = Math.max(prevStartPoint, currStartPoint);
                prev[1] = Math.min(prevEndPoint, currEndPoint);
            }
        }
        
        return count;
    }
}
Leave a Comment