I tried to use BitSet(java) to find the common numbers in two arrays. (It seems works very well on finding repeating chars), however, when I tried the corner case such as Integer.MAX_VALUE (it cannot show up in the res) and Integer.MIN_VALUE( it shows IndexOutOfBoundsException("bitIndex < 0: " + bitIndex)) I thought the BitSet size is auto expandable. Anyone can figure it out? Thanks. BitSet is so handy. :)
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);
}
}