1. 程式人生 > 實用技巧 >803.區間合併

803.區間合併

給定 n 個區間 [li,ri],要求合併所有有交集的區間。
注意如果在端點處相交,也算有交集。
輸出合併完成後的區間個數。
例如:[1,3]和[2,6]可以合併為一個區間[1,6]。

輸入格式

第一行包含整數n。
接下來n行,每行包含兩個整數 l 和 r。

輸出格式

共一行,包含一個整數,表示合併區間完成後的區間個數。

資料範圍

1≤n≤100000,
−109≤li≤ri≤109

輸入樣例:

5
1 2
2 4
5 6
7 8
7 9

輸出樣例:

3

參考程式碼

import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);

		int n = sc.nextInt();
		int[][] segs = new int[n][2];

		for (int i = 0; i < n; i++) {
			segs[i][0] = sc.nextInt();
			segs[i][1] = sc.nextInt();
		}

		Arrays.sort(segs, new Comparator<int[]>() {
			public int compare(int[] o1, int[] o2) {
				return o1[0] - o2[0];
			}
		});

		int res = 0;
		int st = Integer.MIN_VALUE, ed = Integer.MIN_VALUE;
		for (int i = 0; i < n; i++) {
			if (ed < segs[i][0]) {
				st = segs[i][0];
				ed = segs[i][1];
				res++;
			} else {
				ed = Math.max(ed, segs[i][1]);
			}
		}

		System.out.println(res);
		sc.close();
	}
}