class Solution {
public int[][] merge(int[][] intervals) {
List<int[]> res = new LinkedList();
Arrays.sort(intervals,(x,y) -> Integer.compare(x[0],y[0]));
int start = intervals[0][0];
int rightBound = intervals[0][1];
for(int i = 1 ; i < intervals.length ; i++){
if(intervals[i][0] > rightBound){
res.add(new int[]{start,rightBound});
start = intervals[i][0];
rightBound = intervals[i][1];
}else {
rightBound = Math.max(rightBound,intervals[i][1]);
}
}
res.add(new int[]{start,rightBound});
return res.toArray(new int[res.size()][]);
}
}
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(i == idx){
list.add(i - last);
last = i;
}
}
return list;
}
}
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;
}
}