解法一
按照左区间排序
import java.util.*; public class Zuidabuxiangjiaoshu2 { public static void main(String args[]){ Scanner in=new Scanner(System.in); while(in.hasNext()){ int n=in.nextInt(); List list=new ArrayList<Point>(); for(int i=0;i<n;i++){ int tstart=in.nextInt(); int tend=in.nextInt(); list.add(new Point(tstart,tend)); } //按照start(左区间)排序 Collections.sort(list, new Comparator<Point>() { public int compare(Point o1,Point o2){ return o1.start-o2.start; } }); Point temp1=(Point)list.get(0); int cnt=1; int end1=temp1.end; //贪心策略 for(int i=1;i<n;i++){ Point temp2=(Point)list.get(i); if(end1>temp2.end) end1=temp2.end; if(end1<=temp2.start){ cnt++; end1=temp2.end; } } System.out.println(cnt); } } } //定义数据结构 class Point1{ int start; int end; Point1(int start,int end){ this.start=start; this.end=end; } }
解法二
import java.util.*; public class Zuidaqujianshu { public static void main(String args[]){ Scanner in=new Scanner(System.in); while(in.hasNext()){ int n=in.nextInt(); List list=new ArrayList<Point>(); for(int i=0;i<n;i++){ int tstart=in.nextInt(); int tend=in.nextInt(); list.add(new Point(tstart,tend)); } //按照end从小到大排序 Collections.sort(list, new Comparator<Point>() { public int compare(Point o1,Point o2){ return o1.end-o2.end; } }); //贪心策略 Point temp1=(Point)list.get(0); int cnt=1; int end1=temp1.end; for(int i=1;i<n;i++){ Point temp2=(Point)list.get(i); if(end1<=temp2.start){ cnt++; end1=temp2.end; } } System.out.println(cnt); } } } //定义数据结构 class Point{ int start; int end; Point(int start,int end){ this.start=start; this.end=end; } }