代码随想录算法训练营天 第八章 三十六天| 435. 无重叠区间 763.划分字母区间 56. 合并区间
435. 无重叠区间
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][1],intervals[i][1]);
} else {
count++;
}
}
return intervals.length - count;
}
}
763.划分字母区间
class Solution {
public List<Integer> partitionLabels(String s) {
List<Integer> list = new ArrayList<>();
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;
}
}
56. 合并区间
class Solution {
public int[][] merge(int[][] intervals) {
List<int[]> result = new ArrayList<>();
if (intervals.length == 0) {
return result.toArray(new int[result.size()][]);
}
Arrays.sort(intervals,(a,b)->Integer.compare(a[0],b[0]));
int start = intervals[0][0];
int right = intervals[0][1];
for (int i = 0; i < intervals.length; i++) {
if (intervals[i][0] > right) {
result.add(new int[]{start,right});
start = intervals[i][0];
right = intervals[i][1];
} else {
right = Math.max(right,intervals[i][1]);
}
}
result.add(new int[]{start,right});
return result.toArray(new int[result.size()][]);
}
}