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 № 1Sie 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++;
}