435. 无重叠区间
题目链接:435. 无重叠区间 - 力扣(LeetCode)
思路:和气球题一样,只是结果是总长度减去射箭数
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]){
count++;
}else{
intervals[i][1] = Math.min(intervals[i][1],intervals[i-1][1]);
}
}
return intervals.length - count;
}
}
763.划分字母区间
题目链接:763. 划分字母区间 - 力扣(LeetCode)
思路:统计每个字符最后出现的位置,从头遍历字符,更新字符最远下标,直到字符最远下标和当前位置相等,则是分割点
class Solution {
public List<Integer> partitionLabels(String s) {
List<Integer> list = new ArrayList<>();
int[] edge = new int[26];
char[] chars = s.toCharArray();
int index = 0;
for(int i = 0; i < chars.length; i++){
edge[chars[i] - 'a'] = i;
}
int length = 0;
for(int i = 0; i < chars.length; i++){
index = Math.max(index,edge[chars[i] - 'a']);
if(i == index){
list.add(i - length +1);
length = i+1;
}
}
return list;
}
}
56. 合并区间
思路:和上面题目一样,确定的是重合区间。返回值上变得复杂一点。
class Solution {
public int[][] merge(int[][] intervals) {
Arrays.sort(intervals,(a,b) -> Integer.compare(a[0],b[0]));
List<int[]> list = new ArrayList<>();
int start = intervals[0][0];
int maxlength = intervals[0][1];
for(int i = 1; i < intervals.length; i++){
if(intervals[i][0] <= maxlength){
maxlength = Math.max(maxlength,intervals[i][1]);
}else{
list.add(new int[]{start,maxlength});
start = intervals[i][0];
maxlength = intervals[i][1];
}
}
list.add(new int[]{start,maxlength});
return list.toArray(new int[list.size()][]);
}
}
1111

被折叠的 条评论
为什么被折叠?



