算法 n1段区间 与 n2段区间求交集

来源:互联网 发布:android滑动解锁源码 编辑:程序博客网 时间:2024/05/18 02:01

如下所示:

                                        1      3        4                    9             11            13

n1段区间之间互无交集,|——|        |——————|               |————|                                         

n2段区间之间互无交集       |————|     |——|   |————|              |——————|

                                            2            5     6     7   8            10           12                  14

仅通过图示来看很容易得到交集的答案,交集是[2,3], [4,5],  [6,7],  [8,9],  [12,13],但是当区间很多时如何去求?


首先定义两个List<Long> list1=new ArrayList<Long>();   List<Long> list2=new ArrayList<Long>();

list1放置n1段区间的起始终止点 :list1.add(1);list1.add(3);...

list2放置n2段区间的起始终止点:list2.add(2);list2.add(5);.....

然后调用函数:

public List<Long> GetIntersection(List<Long> list1, List<Long> list2){List<Long> intersection=new ArrayList<Long>();for(int i=0;i<list1.size();i+=2){Long start1=list1.get(i);  Long end1=list1.get(i+1);for(int j=0;j<list2.size();j+=2){Long start2=list2.get(j);  Long end2=list2.get(j+1);//  |______|                                   |______|//             |______|     or        |______|if(end1<=start2 || end2<=start1){continue;}if(start2>start1){    if(end1<end2){    //  |______|//       |______|intersection.add(start2);  intersection.add(end1);}else{//  |______|//    |____|intersection.add(start2);  intersection.add(end2);}}else{if(end1<end2){    //      |___|//     |______|intersection.add(start1);  intersection.add(end1);}else{//       |______|//    |____|intersection.add(start1);  intersection.add(end2);}}}}return intersection;}


阅读全文
0 0