首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java,在整数列表中找到交集

Java,在整数列表中找到交集
EN

Stack Overflow用户
提问于 2015-10-23 15:52:48
回答 1查看 374关注 0票数 1

我有一个类似于ArrayList的对象:

代码语言:javascript
复制
{{"ObjectName",[[1,3],[11,24]]},
{"ObjectName2",[[3,4],[5,6],[12,20]]},
{"ObjectName3",[[30,38]]}}

该对象由一个字符串(对象名称)和整数列表中的许多整数列表组成。

一对整数列表,如11,24:表示从11厘米到24厘米,长度范围。

如何使用Java代码和less bigO来检查1对象的长度对是否与其他对象的长度范围相交。就像ObjectName2有一对整数12,20与ObjectName的11,24是相交的。

我有一个sudo代码有bigO(n^3):

代码语言:javascript
复制
for(Object o1 : Arraylist){
   for(Object o2 : Arraylist){
       for(int x = 0; x < o1.lengthlist.size(),x++){

            if(o1.lengthlist.get(x)[0]>=o2.lengthlist.get(x)[0]
                && o1.lengthlist.get(x)[1]<=o2.lengthlist.get(x)[1])
               {got the intersection part}
       }
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-23 16:33:17

我做了一个完整的例子来说明该如何做。

类别1

代码语言:javascript
复制
package intersectioninintegerlist;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 *
 * @author Ahmad
 */
public class IntersectionInIntegerList {

    public static void main(String[] args) {
        List<Pair> lst1 = new ArrayList<>(Arrays.asList(new Pair(1,3), new Pair(11,24)));
        Obj obj1 = new Obj("obj1", lst1);

        List<Pair> lst2 = new ArrayList<>(Arrays.asList(new Pair(3,4), new Pair(5,6), new Pair(12,20)));
        Obj obj2 = new Obj("obj2", lst2);

        List<Pair> lst3 = new ArrayList<>(Arrays.asList(new Pair(30,38)));
        Obj obj3 = new Obj("obj3", lst3);

        List<Obj> objs = new ArrayList<>(Arrays.asList(obj1, obj2, obj3));

        for(int i = 0; i < objs.size(); i++){
            for(int j = i+1; j < objs.size(); j++){
                findIntersect(objs.get(i), objs.get(j));
            }
        }

    }

    private static void findIntersect(Obj o1, Obj o2) {
        System.out.println(o1.name + " - " + o2.name);
        for(Pair p1 : o1.pairs){
            for(Pair p2 : o2.pairs){
                int A = p1.i1;
                int B = p1.i2;
                int X = p2.i1;
                int Y = p2.i2;
                if((A >= X && A <= Y) || (X >= A && X <= B)){
                    System.out.println(o1.name + " intersects with " + o2.name);
                }
            }
        }
    }
}

Class2

代码语言:javascript
复制
package intersectioninintegerlist;

import java.util.List;

/**
 *
 * @author Ahmad
 */
public class Obj {

        public String name;
        public List<Pair> pairs;

        public Obj(String n, List<Pair> p){
            name = n;
            pairs = p;
        }
}

Class3

代码语言:javascript
复制
package intersectioninintegerlist;

/**
 *
 * @author Ahmad
 */
public class Pair {
        int i1;
        int i2;
        public Pair(int _i1, int _i2){
            i1 = _i1;
            i2 = _i2;
        }
}

希望能帮上忙。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33306644

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档