目录
模板:
// 将所有存在交集的区间合并
public static void merge(ArrayList<PII> segs) {
ArrayList<PII> res=new ArrayList<>();
//排序
Collections.sort(segs,new Comparator<PII>() {
@Override
public int compare(PII o1, PII o2) {
int flag;
flag=o1.bgin-o2.bgin;
if(flag==0) {
flag=o1.end-o2.end;
}
return flag;
}
});
//最左最右边界初始化
int st=(int) -1e9,ed=(int)-1e9;
for(int i=0;i<segs.size();i++) {
PII pii = segs.get(i);
//如果维护的区间和枚举的区间没有任何交集 就加入
if(ed<pii.getBgin()) {
if(st!=-1e9) res.add(pii);
st=pii.bgin;
ed=pii.end;
}
//有交集只要把右交点更新为最大即可
else ed=Math.max(ed, pii.end);
}
//最后一个区间后面没有比较的,要加入进去
if(st!=-1e9) {
PII pii=new PII(st,ed);
res.add(pii);
}
System.out.println(res.size());
}
题目:
代码:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
public class Main {
static BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
static int N=100010;
static int n;
static ArrayList<PII> segs=new ArrayList<>();
public static void main(String[] args) throws IOException {
n=Integer.parseInt(br.readLine());
String[] st;
for(int i=0;i<n;i++) {
st=br.readLine().split(" ");
int l=Integer.parseInt(st[0]);
int r=Integer.parseInt(st[1]);
PII pii = new PII(l,r);
segs.add(pii);
}
merge(segs);
}
public static void merge(ArrayList<PII> segs) {
ArrayList<PII> res=new ArrayList<>();
//排序
Collections.sort(segs,new Comparator<PII>() {
@Override
public int compare(PII o1, PII o2) {
int flag;
flag=o1.bgin-o2.bgin;
if(flag==0) {
flag=o1.end-o2.end;
}
return flag;
}
});
//最左最右边界初始化
int st=(int) -1e9,ed=(int)-1e9;
for(int i=0;i<segs.size();i++) {
PII pii = segs.get(i);
//如果维护的区间和枚举的区间没有任何交集 就加入
if(ed<pii.getBgin()) {
if(st!=-1e9) res.add(pii);
st=pii.bgin;
ed=pii.end;
}
//有交集只要把右交点更新为最大即可
else ed=Math.max(ed, pii.end);
}
//最后一个区间后面没有比较的,要加入进去
if(st!=-1e9) {
PII pii=new PII(st,ed);
res.add(pii);
}
System.out.println(res.size());
}
}
class PII{
int bgin,end;
PII(){}
public PII(int bgin, int end) {
super();
this.bgin = bgin;
this.end = end;
}
public int getBgin() {
return bgin;
}
public void setBgin(int bgin) {
this.bgin = bgin;
}
public int getEnd() {
return end;
}
public void setEnd(int end) {
this.end = end;
};
}