1133 不重疊的線段(貪心)
阿新 • • 發佈:2018-11-26
X軸上有N條線段,每條線段有1個起點S和終點E。最多能夠選出多少條互不重疊的線段。
(注:起點或終點重疊,不算重疊)。例如:[1 5][2 3][3 6],可以選[2 3][3 6],這2條線段互不重疊。
思路:
以結束時間排序,最先結束就可以更早的開始,這樣才會更多的進行任務
程式碼:
package _51_node.greedy; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.Scanner; public class ex_1133 { /** * 1133 不重疊的線段 * 1 秒 131,072 KB 10 分 2 級題 * X軸上有N條線段,每條線段有1個起點S和終點E。最多能夠選出多少條互不重疊的線段。 * (注:起點或終點重疊,不算重疊)。例如:[1 5][2 3][3 6],可以選[2 3][3 6],這2條線段互不重疊。 * * * @param args */ public static void main(String[] args) { Scanner cin = new Scanner(System.in); int n = cin.nextInt(); ArrayList<Point> arrayList = new ArrayList<>(); for (int i = 1; i <= n; i++) { int a = cin.nextInt(); int b = cin.nextInt(); arrayList.add(new Point(a, b)); } cin.close(); Collections.sort(arrayList, new Comparator<Point>() { @Override public int compare(Point o1, Point o2) { return o1.end - o2.end; } }); long ans = 0, t = (long)-1e9; for (int i = 0; i < arrayList.size(); i++) { if(arrayList.get(i).start >= t) { t = arrayList.get(i).end; ans++; } } System.out.println(ans); } static class Point { int start; int end; public Point(int start, int end) { this.start = start; this.end = end; } } }