第八章 贪心算法 part05
大纲
● 435. 无重叠区间
● 763.划分字母区间
● 56. 合并区间
leetcode 435
无重叠区间
class Solution {
public int eraseOverlapIntervals(int[][] intervals) {
Arrays.sort(intervals, (a, b)->Integer.compare(a[0], b[0]));
int res = 0;
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]);
res++;
}
}
return res;
}
}
leetcode 763
划分字母区间
class Solution {
public List<Integer> partitionLabels(String s) {
List<Integer> res = new ArrayList<>();
int[] last = new int[26];
for (int i = 0; i < s.length(); i++) {
last[s.charAt(i) - 'a'] = i;
}
int start = 0, end = 0;
for (int i = 0; i < s.length(); i++) {
end = Math.max(last[s.charAt(i) - 'a'], end);
if (end == i) {
res.add(end - start + 1);
start = end + 1;
}
}
return res;
}
}
leetcode 56
合并区间
class Solution {
public int[][] merge(int[][] intervals) {
Arrays.sort(intervals, (a, b)->Integer.compare(a[0], b[0]));
LinkedList<int[]> res = new LinkedList<>();
res.add(intervals[0]);
for (int i = 1; i < intervals.length; i++) {
if (intervals[i][0] > res.getLast()[1]) res.add(intervals[i]);
else res.set(res.size() - 1, new int[]{res.getLast()[0], Math.max(res.getLast()[1], intervals[i][1])});
}
return res.toArray(new int[res.size()][]);
}
}