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], intervals[i - 1][1]);
} else count++;
}
return intervals.length - count;
}
}
- 763.划分字母区间
完全没弄懂
class Solution {
public List<Integer> partitionLabels(String s) {
int[] count = new int[26];
for (int i = 0; i < s.length(); i++) {
count[s.charAt(i) - 'a'] = i;
}
List<Integer> res = new ArrayList<>();
int left = 0;
int right = 0;
for (int i = 0; i < s.length(); i++) {
right = Math.max(right, count[s.charAt(i) - 'a']);
if (i == right) {
res.add(right - left + 1);
left = i + 1;
}
}
return res;
}
}
- 56. 合并区间
必须得秒的题
class Solution {
public int[][] merge(int[][] intervals) {
List<int[]> list = new ArrayList<>();
Arrays.sort(intervals, (a, b) -> Integer.compare(a[0], b[0]));
list.add(intervals[0]);
for (int i = 1; i < intervals.length; i++) {
int[] last = list.get(list.size() - 1);
if (intervals[i][0] <= last[1]) {
last[1] = Math.max(intervals[i][1], last[1]);
} else {
list.add(intervals[i]);
}
}
int[][] res = new int[list.size()][2];
for (int i = 0; i < res.length; i++) {
res[i] = list.get(i);
}
return res;
}
}