目录
一、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])
continue;
else{
intervals[i][1]=Math.min(intervals[i][1],intervals[i-1][1]);
count++;
}
}
return count-1;
}
}
另外一种写法
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) {
List<Integer> list=new LinkedList<>();
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) {
LinkedList<int []>result=new LinkedList<>();
Arrays.sort(intervals, (o1, o2) -> Integer.compare(o1[0], o2[0]));
result.add(intervals[0]);
int count=1;
for(int i=1;i<intervals.length;i++)
{
if(intervals[i][0]<=result.getLast()[1])
{
int start=result.getLast()[0];
int end=Math.max(intervals[i][1],result.getLast()[1]);
result.removeLast();
result.add(new int[]{start, end});
}
else{
result.add(intervals[i]);
}
}
return result.toArray(new int [result.size()][]);
}
}