Ein array ist Teilmenge des anderen array
Wie kann ich effizient überprüfen, um zu sehen, ob alle Elemente in ein integer-array sind Teilmenge aller Elemente eines anderen Array in java? Zum Beispiel [33 11 23] ist Untergruppe von [11 23 33 42]. Vielen Dank im Voraus.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Machen
HashSet
aus der Obermenge array. Überprüfen Sie, ob jedes Element der Teilmenge array enthalten sind in derHashSet
. Dies ist eine sehr schnelle operation.Wenn Sie nicht gebunden an die Verwendung von Arrays, Java-collection hat die
containsAll
Methode:Dieser wird genau das tun, was Sie wollen, effizient.
angenommen, Sie möchten prüfen, A ist Teilmenge von B jedes element von B in einen hash, dann iterieren über Elemente in A, die alle vorhanden sein müssen, die hash -
Ich kam mit zwei anderen Lösung
Eingang:
int mainArray[] = { 1, 2, 3, 2, 5, 6, 2 }, subArray[] = { 2, 2, 2 };
erste Lösung iteriert über die beiden arrays enthalten ist und vergleichen Sie,
main[i] = -1
wird verwendet, um zu vermeiden, sich wiederholende Elemente enthalten wiederzweite Lösung verwendet hashmap mit den Tasten von
1....9
und Wert als0
,als Nächstes werden wir iterieren über Haupt-array und
+1
jeweiligen Wertals Nächstes werden wir iterieren über sub-array und die
-1
jeweiligen Wertneben comapre Summe der Werte der hashmap zu Unterschied in der Länge der beiden Arrays
Der äußeren Schleife nimmt alle der Elemente von arr2[] eins nach dem anderen. Die innere Schleife wird Linear durchsucht, um das element wieder durch äußere Schleife. Wenn alle Elemente gefunden werden, dann true zurück, sonst false zurück.
boolean checkIsSubset(int arr1[], int arr2[]){
Warum tun binäre Suche nach dem Sortieren??
Da beide arrays verfügbar sein wird in sortierter form, können wir nur verwenden zwei Zeiger wie folgt:-
boolean isSubset(int arr1[], int arr2[], int m, int n){
}
Sortieren, sowohl die arrays und überprüfen Sie alle Elemente in der kleineren Felder vorhanden sind, in larget-array. Dies ist ohne Verwendung von zusätzlichen Platz.
Wenn nicht, benutze hasmap wie schon jemand vorgeschlagen.
Diese überprüft, ob alle Elemente der möglichen Teilmenge fehlt von den größeren array. Wenn es ist, es ist nicht eine Teilmenge: