Так что я недавно получил следующий вопрос в техническом интервью, и я подумал, что это довольно интересно.Пересечение набора с завихрением Java
Данные два массива: A = {1,2,2,4,5} и B = {1,2,6,} записывают код, который выполняет следующие две операции: AB {2,4,5} и BA {6}. Значит, вы найдете общий элемент в другом массиве и удалите его из оригинала. Также, если B было {1,2}, тогда B-A будет просто {}, поскольку A содержит все элементы B и B не имеет уникальных элементов.
Я решил этот вопрос следующим образом, и я надеялся увидеть, есть ли у кого-нибудь какие-либо предложения о том, как сделать его лучше.
public static void main(String args[]) {
Map hashtable = new HashMap();
int a[] = {1,1,2,4,5,6,6};
int b[] = {1,2,6};
ArrayList ba = new ArrayList();
ArrayList ab = new ArrayList();
int[] occurances = new int[a.length];
//int occurances = 0;
for (int i = 0; i < a.length; i++) {
occurances[a[i]]++;
hashtable.put(a[i], occurances[a[i]]);
}
//System.out.println(Arrays.toString(occurances));
System.out.println(hashtable);
//find BA
for (int i = 0; i < b.length; i++) {
if(hashtable.containsKey(b[i])) {
occurances[b[i]]--;
hashtable.put(b[i], occurances[b[i]]);
} else ba.add(b[i]);
}
for(int i = 0; i <a.length; i++) {
if(hashtable.containsKey(a[i]) && occurances[a[i]] != 0) {
ab.add(a[i]);
occurances[a[i]]--;
hashtable.put(a[i], occurances[a[i]]);
}
}
System.out.println("AB = " + ab);
System.out.println("BA =" + ba);
}
}
**** EDIT ***** я ошибочно назвал массивы Sets, когда я изначально поставил вопрос. Поскольку массивы могут иметь повторяющиеся элементы, они по определению не являются Sets. Извините за путаницу.
'Карта hashtable' .... мои глаза X_x – gtgaxiola
' {1,2,2,4,5} 'не набор. – dasblinkenlight
Было бы предложено реализовать ваши наборы A и B с java Set. У вас будет меньше работы, чем реализация наборов списком – gefei