我的问题是是否有可能获得 2 个未排序的列表,并根据它在第一个列表“List1”中的顺序获得两个列表的交集。
public static List intersection(List A, List B) {
List outcome = null;
try {
outcome = A.getClass().newInstance();
} catch (Exception e) {};
LinkedList<Integer> temp = new LinkedList<>();
LinkedHashSet<Integer> ALinkedSet = new LinkedHashSet<>(A);
LinkedHashSet<Integer> BLinkedSet = new LinkedHashSet<>(B);
// first filter elements into temp
while (ALinkedSet.size() > 0) {
int v = ALinkedSet.removeFirst();
if (BLinkedSet.contains(v)) {
temp.addLast(v);
}
}
// add filtered values back to L1
while (temp.size() > 0) {
outcome.addLast(temp.removeFirst());
}
return outcome;
}
我正在寻找一种方法来完成这项工作,并且可能将其转换为 O(n)。
这是想出的简单方法。有没有更好的方法将大 O 变成线性?我很确定这至少是 O(n*n)。
public static List Intersection(List A, List B) {
List outcome = null;
try {
tulos = A.getClass().newInstance();
} catch (Exception e) {};
LinkedHashSet<Integer> AHashSet = new LinkedHashSet<>(A);
LinkedHashSet<Integer> BHashSet = new LinkedHashSet<>(B);
for(Integer Aitem : AHashSet){
for(Integer Bitem : BHashSet){
if(Aitem==Bitem) {
outcome.add(Aitem);
}
}
}
return outcome;
}
以下会是线性的吗?
public static List Intersection(List A, List B) {
List outcome = null;
try {
tulos = A.getClass().newInstance();
} catch (Exception e) {};
LinkedHashSet<Integer> BHashSet = new LinkedHashSet<>(B);
for(Object Aitem : A) {
if(BHashSet.contains(Aitem) && !outcome.contains(Aitem)){
outcome.add(Aitem);
}
}
return outcome;
}
largeQ
牛魔王的故事
相关分类