题目解析
本题主要考察:区间交集求解、以及区间合并。
首先,我们要求解输入的多个区间中,任意两个区间的交集(公共区间)。
然后,将这些公共区间进行合并后打印。
两个区间的交集求解思路如下:
将两个区间按照开始位置进行升序,假设排序后,两个区间顺序是:[[s1, e1],[s2, e2]]
那么必然 s1 <= s2,因此如果存在交集的话,即e1 >= s2
则交集的左边界必然是s2,而交集的右边界取值Math.min(e1, e2)
Java算法源码
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[][] ranges = new int[n][2];
for (int i = 0; i < n; i++) {
ranges[i][0] = sc.nextInt();
ranges[i][1] = sc.nextInt();
}
getResult(n, ranges);
}
public sta