452. Minimum Number of Arrows to Burst Balloons

class Solution {
    public int findMinArrowShots(int[][] points) {
        if (points == null || points.length == 0) return 0;

        Arrays.sort(points, (a, b) -> a[1] - b[1]);

        int count = 1, pos = points[0][1];

        for (int i = 1; i < points.length; i++){
            if (pos >= points[i][0]) continue;

            count++;
            pos = points[i][1];
        }

        return count;
    }
}

USE TREEMAP

729 My Calendar I

class MyCalendar {

    TreeMap<Integer, Integer> calendar;

    public MyCalendar() {
        calendar = new TreeMap<Integer, Integer>();
    }

    public boolean book(int start, int end) {
        Integer prev = calendar.floorKey(start), next = calendar.ceilingKey(start);
        if ( (prev == null || calendar.get(prev) <= start) && (next == null || end <= next) ){
            calendar.put(start, end);
            return true;
        }

        return false;
    }
}

/**
 * Your MyCalendar object will be instantiated and called as such:
 * MyCalendar obj = new MyCalendar();
 * boolean param_1 = obj.book(start,end);
 */

715 Range Module

class RangeModule {

    TreeMap<Integer, Integer> map;

    public RangeModule() {
        map = new TreeMap<>();
    }

    public void addRange(int left, int right) {
        if (right <= left) return;

        Integer prev = map.floorKey(left), next = map.floorKey(right);

        if (prev == null && next == null){
            map.put(left, right);
        }
        else if (prev != null && map.get(prev) >= left){
            map.put(prev, Math.max(map.get(next), Math.max(map.get(prev), right)));
        }
        else{
            map.put(left, Math.max(map.get(next), right));
        }

        Map<Integer, Integer> subMap = map.subMap(left, false, right, true);
        Set<Integer> set = new HashSet<>(subMap.keySet());
        map.keySet().removeAll(set);
    }

    public boolean queryRange(int left, int right) {
        Integer prev = map.floorKey(left);
        if (prev == null) return false;
        return map.get(prev) >= right;
    }

    public void removeRange(int left, int right) {
        if (right <= left) return;

        Integer prev = map.floorKey(left), next = map.floorKey(right);

        if (next != null && map.get(next) > right){
            map.put(right, map.get(next));
        }
        if (prev != null && map.get(prev) > left){
            map.put(prev, left);
        }


        Map<Integer, Integer> subMap = map.subMap(left, true, right, false);
        Set<Integer> set = new HashSet<>(subMap.keySet());
        map.keySet().removeAll(set);
    }
}

/**
 * Your RangeModule object will be instantiated and called as such:
 * RangeModule obj = new RangeModule();
 * obj.addRange(left,right);
 * boolean param_2 = obj.queryRange(left,right);
 * obj.removeRange(left,right);
 */

results matching ""

    No results matching ""