class Solution {
public int eraseOverlapIntervals(int[][] intervals) {
Arrays.sort(intervals,(a,b)->{
return Integer.compare(a[0],b[0]);
});
int count = 1;
for(int i = 1; i < intervals.length;i++){
if(intervals[i][0] < intervals[i-1][1]){
intervals[i][1] = Math.min(intervals[i][1], intervals[i-1][1]);
continue;
}else{
count++;
}
}
return intervals.length - count;
}
}
class Solution {
public List<Integer> partitionLabels(String s) {
List<Integer> list = new LinkedList<>();
int[] edge = new int[26];
char[] chars = s.toCharArray();
for(int i = 0; i < chars.length; i++){
edge[chars[i] - 'a'] = i;
}
int idx = 0;
int last = -1;
for(int i = 0; i < chars.length; i++){
idx = Math.max(idx, edge[chars[i] - 'a']);
if(idx == i){
list.add(i - last);
last = i;
}
}
return list;
}
}
class Solution {
public int[][] merge(int[][] intervals) {
List<int[]> res = new LinkedList<>();
Arrays.sort(intervals, (a,b) -> Integer.compare(a[0],b[0]));
int start = intervals[0][0];
int rightmostRightBound = intervals[0][1];
for(int i = 1; i < intervals.length; i++){
if(intervals[i][0] > rightmostRightBound){
res.add(new int[]{start,rightmostRightBound});
start = intervals[i][0];
rightmostRightBound = intervals[i][1];
}else{
rightmostRightBound = Math.max(rightmostRightBound, intervals[i][1]);
}
}
res.add(new int[]{start,rightmostRightBound});
return res.toArray(new int[res.size()][]);
}
}