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);
*/