Я попытался использовать BitSet (java), чтобы найти общие числа в двух массивах. (Кажется, очень хорошо работает поиск повторяющихся символов), однако, когда я попробовал использовать угловой регистр, такой как Integer.MAX_VALUE (он не может отображаться в res) и Integer.MIN_VALUE (он показывает IndexOutOfBoundsException ("bitIndex < 0:" + bitIndex)) Я думал, что размер BitSet автоматически расширяется. Кто-нибудь может понять это? Благодарю. BitSet так удобен. :)BitSet не работает для Integer.MAX_VALUE и Integer.MIN_VALUE
public static List<Integer> common(List<Integer> A, List<Integer> B) {
List<Integer> res = new ArrayList<Integer>();
BitSet bitSetA = new BitSet();
BitSet bitSetB = new BitSet();
for (Integer x : A) {
bitSetA.set(x);
}
for (Integer x : B) {
bitSetB.set(x);
}
bitSetA.and(bitSetB);
for (int i = 0; i < bitSetA.size(); i++) {
if (bitSetA.get(i)) {
res.add(i);
}
}
return res;
}
public static void main(String[] args) {
List<Integer> A = new ArrayList<Integer>();
A.add(1);A.add(2);A.add(Integer.MIN_VALUE);
List<Integer> B = new ArrayList<Integer>();
B.add(Integer.MIN_VALUE);B.add(4);B.add(4);
List<Integer> res = new ArrayList<Integer>();
res = common(A,B);
System.out.println(res);
}
}
Большое вам спасибо! – Clark