题目:有两个有序的集合,集合的每个元素都是一段范围,求其交集,例如交集{[4,8],[9,13]}和{[6,12]}的交集是{[6,8],[9,12]}
两个有序的集合,集合的每个元素都是一段范围,求其交集
所求交集结果直接打印到输出终端
@param collects1:集合1
@param collects2:集合2
参数校验:集合内要有元素;0号下标小于1号下标
public static void intersectionWithColletion(List<List<Integer>> collects1, List<List<Integer>> collects2) {}
第一步:创建参数校验的方法 isVaild(),该方法不外露
private static boolean isVaild(List<List<Integer>> collects) {
if (collects.size() < 1) {
System.err.println("两集合无交集");
return false;
}
Iterator <List <Integer>> iterator = collects.iterator();
while (iterator.hasNext()) {
List <Integer> list = iterator.next();
if (list.size() != 2) {
System.err.println("集合区间不合法");
return false;
}
if (list.get(0) > list.get(1)) {
System.err.println("集合区间非有序");
return false;
}
}
return true;
}
第二步:参数校验 collections是List<List<Integer>>
类型的,遍历集合
public static void intersectionWithColletion(List<List<Integer>> collects1, List<List<Integer>> collects2) {
if (!(isVaild(collects1) && isVaild(collects2))) {
return;
}
//迭代器是<List<Integer>>类型的
Iterator <List <Integer>> iterator1 = collects1.iterator();
while (iterator1.hasNext()) {
List <Integer> list1 = iterator1.next();
Iterator <List <Integer>> iterator2 = collects2.iterator();
while (iterator2.hasNext()) {
List <Integer> list2 = iterator2.next();
intersection(list1, list2);
}
}
}
第三步:求区间交集,分情况输出
private static void intersection(List<Integer> list1, List<Integer> list2) {
Integer a1 = list1.get(0);
Integer a2 = list1.get(1);
Integer b1 = list2.get(0);
Integer b2 = list2.get(1);
if (a1 > b2 || b1 > a2) {
return;
}
if (a1 == b2) {
System.out.println("["+a1+"]");
}
if (a2 == b1) {
System.out.println("["+a2+"]");
}
if (a1 >= b1) {
System.out.print("[" + a1 + ",");
if (b2 < a2) {
System.out.println(b2 + "]");
} else {
System.out.println(a2 + "]");
}
}
if (b1 >= a1) {
System.out.print("["+b1+",");
if (b2 < a2) {
System.out.println(b2 + "]");
} else {
System.out.println(a2 + "]");
}
}
}
所有情况如图所示:
测试:
public static void main(String[] args) {
// TODO Auto-generated method stub
ArrayList<List<Integer>> a = new ArrayList<List<Integer>>();
ArrayList<List<Integer>> b = new ArrayList<List<Integer>>();
ArrayList<Integer> arrayList1 = new ArrayList<Integer>();
arrayList1.add(4);
arrayList1.add(8);
ArrayList<Integer> arrayList2 = new ArrayList<Integer>();
arrayList2.add(9);
arrayList2.add(13);
ArrayList<Integer> arrayList3 = new ArrayList<Integer>();
arrayList3.add(6);
arrayList3.add(12);
a.add(arrayList1);
a.add(arrayList2);
b.add(arrayList3);
intersectionWithColletion(a,b);
}
测试结果:
集合赋值如图所示: