/ Zwei sich wiederholende Zahlen im Endergebnis der Schnittmenge zweier Arrays - Java

zwei sich wiederholende Zahlen im Endergebnis des Schnittpunkts zweier Arrays - Java

Meine Aufgabe ist es also, zwei Arrays zu schneiden, aber es istEs ist nicht erlaubt, 2 sich wiederholende Elemente im Endergebnis zu haben. Ich habe diesen Code erhalten, aber er erfüllt die Aufgabe nicht, denn wenn er in jedem Array zwei gleiche Zahlen enthält, erscheinen beide im Endergebnis. Irgendwelche Vorschläge?

static void printIntersection(int[] arr1, int[] arr2) {
int m = arr1.length;
int n = arr2.length;
int i = 0, j = 0;

while ((i < m) && (j < n)) {
if (arr1[i] == arr2[j]) {
System.out.print(arr1[i] + " ");
i++;
j++;
} else if (arr1[i] < arr2[j])
i++;
else
j++;
}
}

static void printArray(int[] arr) {
for (int i = 0; i < arr.length; i++)
System.out.print(arr[i] + " ");
System.out.println();
}

public static void main(String[] args) {
int[] arr1 = {1, 2, 2, 4, 5, 6};
int[] arr2 = {2, 2, 3, 5, 7};

System.out.println("Array1:");
printArray(arr1);

System.out.println("Array2:");
printArray(arr2);

System.out.println("Union:");
System.out.println();

System.out.println("Intersection:");
printIntersection(arr1, arr2);
System.out.println();
}

Antworten:

0 für die Antwort № 1

Sie müssen eine pflegen list/array um zu überprüfen, ob es ein doppeltes Element gibt. Verwenden ArrayList ist eine Option:

static void printIntersection(int[] arr1, int[] arr2) {
List<Integer> list = new ArrayList<>();
int m = arr1.length;
int n = arr2.length;
int i=0,j=0;

while((i<m) && (j<n)) {
if(arr1[i] == arr2[j]) {
if(!list.contains(arr1[i]))
{
System.out.print(arr1[i] + " ");
list.add(arr1[i]);
}
i++;
j++;
}
else if(arr1[i] < arr2[j])
i++;
else
j++;
}
}

NB: Ich habe Ihren Algorithmus nicht getestet.


0 für die Antwort № 2

Das Problem liegt in diesem Teil. Wenn ein Element in arr1 Stimmt mit einem Element in überein arr2, Es wird gedruckt und die beiden Zähler erhöht.

if(arr1[i] == arr2[j]) {
System.out.print(arr1[i] + " ");
i++;
j++;
}

Die obige Bedingung besagt nichts über doppelte Elemente in arr1 selbst. Sie müssen weitere Bedingungen hinzufügen, um dies zu handhaben.

Ihre Eingabearrays scheinen sortiert zu sein. In diesem Fall können Sie Bedingungen hinzufügen, um nur den Wert und das Inkrement zu drucken j wenn das Element von arr1 unterscheidet sich von der vorherigen, zum Beispiel:

if (arr1[i] == arr2[j]) {
if (i == 0 || arr1[i - 1] != arr1[i]) {
System.out.print(arr1[i] + " ");
j++;
}
i++;
}