435. 无重叠区间
class Solution {
public int eraseOverlapIntervals(int[][] intervals) {
Arrays.sort(intervals, (a, b) -> {
return a[0] - b[0];
});
int count = 0;
for(int i = 1; i < intervals.length; i++) {
if(intervals[i][0] < intervals[i - 1][1]) {
count++;
intervals[i][1] = Math.min(intervals[i][1], intervals[i - 1][1]);
}
else continue;
}
return count;
}
}
763.划分字母区间
class Solution {
public List<Integer> partitionLabels(String s) {
int[] edge = new int[26];
char[] chars = s.toCharArray();
for(int i = 0; i < chars.length; i++) {
edge[chars[i] - 'a'] = i;
}
List<Integer> result = new LinkedList<>();
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) {
result.add(idx - last);
last = idx;
}
}
return result;
}
}
56. 合并区间
class Solution {
public int[][] merge(int[][] intervals) {
List<int[]> result = new LinkedList<>();
Arrays.sort(intervals, (a, b) -> Integer.compare(a[0], b[0]));
int start = intervals[0][0];
int end = intervals[0][1];
for(int i = 1; i < intervals.length; i++) {
if(intervals[i][0] <= end) {
end = Math.max(intervals[i][1], end);
}
else {
result.add(new int[]{start, end});
start = intervals[i][0];
end = intervals[i][1];
}
}
result.add(new int[]{start, end});
return result.toArray(new int[result.size()][2]);
}
}