Wir haben eine Liste von Strings-Elementen. Zum Beispiel [A, B, B, A, K, B]. Unser Programm muss diese Liste auf die nächsten Chargen [["A", "B", "K"], ["B", "A"], ["B"]] aufteilen. Alle Butches müssen nur eindeutige Elemente enthalten, die Anzahl der Batches muss minimal sein und die Komplexität des Algorithmus muss linear O (n) sein.Geteilte Liste auf eindeutigen Chargen
Antwort
ich normalerweise nicht beantworten, wenn die Fragen wie ein Hausaufgaben sieht, was ich denke, es ist. Aber gut ... hier ist eine nette und einfache Lösung mit List
, Set
und . (Wenn Sie über die Reihenfolge egal, ersetzen dann HashSet
mit LinkedHashSet
)
import java.util.*;
public class StringBatches {
public static void main(String[] args) {
String[] ss = {"A","B","B","A","K","B", "A"};
List<Set<String>> l = new ArrayList<Set<String>>();
for (String s : ss) {
putInUniqueSet(l, 0, s);
}
System.out.println(l);
}
public static boolean putInUniqueSet(List<Set<String>> l, int idx, String s) {
if(l.size() <= idx)
l.add(new HashSet<String>());
return !l.get(idx).add(s) ? putInUniqueSet(l, idx+1, s) : true;
}
}
Ausgang:
[[A, B, K], [A, B], [A, B]]
Können Sie die Erklärung zur Rückgabe erklären? Niemals so etwas gesehen: D – Ofir
Nun, die 'add (s)' wird 'true' zurückgeben, wenn' set' das 's' nicht bereits enthält. Was bedeutet, wenn "s" neu im Set ist, dann ist es in Ordnung. Andernfalls, wenn "s" existiert, dann versuche, das "s" in das nächste existierende "set" unter Verwendung der Rekursion zu setzen. Bis "s" ein 'set' findet, das' s' nicht enthält ... wenn Sie die Verwendung von '?'und': 'seine Art von einem if sonst stmnt, ein ternärer Operator https://en.wikipedia.org/wiki/%3F: – MrSimpleMind
Versuchen Sie, die Liste zu verwenden und festzulegen. Ihr Set erlaubt keine doppelten Werte und List erlaubt. Sie können also über alle Elemente hinweg iterieren und beim Hinzufügen zur Menge prüfen, ob die Länge geändert wurde und ob die Länge nicht geändert wurde, bedeutet, dass es doppelt ist und es der Liste hinzugefügt wird. Ihr nächster Satz wird also die Liste sein. und mach weiter so, es sei denn, deine Listengröße ist null. Es ist nur ein Hinweis darauf, dass dies hilft.
Happy Learning :)
Was meinst du mit gesetzt? – Ofir
Set ist eine Datenstruktur in Java, die keinen doppelten Wert erlaubt. –
Dieser sollte funktionieren. (Und wurde getestet)
ArrayList<ArrayList<String>> batches = new ArrayList<ArrayList<String>>();
ArrayList<String> arr = new ArrayList<String>();
arr.add("A");
arr.add("B");
arr.add("B");
arr.add("A");
arr.add("K");
arr.add("B");
arr.add("A");
batches.add(new ArrayList<String>());
int id = 0, arrID = 0;
while(arrID < arr.size())
{
if(batches.get(id).contains(arr.get(arrID)))
{
id ++;
if(id+1 > batches.size())
batches.add(new ArrayList<String>());
}
else
{
batches.get(id).add(arr.get(arrID));
arrID ++;
id = 0;
}
}
System.out.println("Results: ");
for(int i=0; i<batches.size(); i++)
{
System.out.println("Batch "+i);
for(int x=0; x<batches.get(i).size(); x++)
System.out.println(batches.get(i).get(x));
}
ich wahrscheinlich
Paket dummy eine Liste von Listen
zB tun würde;
importieren java.util.ArrayList; importieren java.util.List;
public class BatchIt {
/**
* @param args
*/
public static void main(String[] args) {
List<List<String>> batches = new ArrayList<List<String>>();
List<String> firstBatch = new ArrayList<String>();
batches.add(firstBatch);
for (String input : args) {
boolean inputAdded = false;
for (List<String> batch : batches) {
if(!batch.contains(input)){
batch.add(input);
inputAdded = true;
break;
}
}
if(!inputAdded){
List<String> nextBatch = new ArrayList<String>();
nextBatch.add(input);
batches.add(nextBatch);
}
}
System.out.print(batches);
}
}
- 1. Geteilte Liste in Unterlisten basierend auf Grenzwerten
- 2. Funken Streaming fehlgeschlagen Chargen
- 3. Liste Array Nicht eindeutigen Wert
- 4. Liste der eindeutigen Listen in Java
- 5. Liste der Objekte mit einem eindeutigen Attribut
- 6. Geteilte Aktionsleiste auf Android 5.0 (Lollipop)
- 7. Geteilte Bildersammlung auf dem iPad (Deep Zoom)
- 8. Geteilte JSON-Arrays basierend auf Länge
- 9. dplyr geteilte Zeichenfolge in eine Komma getrennte Liste
- 10. gradle/intellij - geteilte Testressourcen
- 11. Geteilte Anforderungsdateien in pip
- 12. PHP Pthreads - geteilte Objekte
- 13. Homepage geteilte Layout (CSS)
- 14. Lumen geteilte Steuerung
- 15. Delphi und geteilte Datenquellen
- 16. Android Studio Geteilte Perefences
- 17. geteilte Dateierweiterung von einem Array
- 18. Gruppe HITs in Chargen in Amazon mechanischen Türken mit Boto?
- 19. Geteilte Textzeilen im gescannten Dokument
- 20. Was ist der Unterschied zwischen eindeutigen Formularalgorithmen und eindeutigen Listencontainern?
- 21. Füllen Sie eine Liste mit eindeutigen Zufallswerten mit F #
- 22. SQL Server: Suche Liste von eindeutigen Tabellen über Datenbanken
- 23. Erstellen von eindeutigen Benutzernamen
- 24. Geteilte Mehrfachklasse für ToString-Implementierung
- 25. ipad geteilte Ansicht Dimension Teile
- 26. XSLT geteilte Ausgabedateien - Muenchsche Gruppierung
- 27. Geteilte Bilder mit FileProvider teilen
- 28. Daten in geteilte Datenbank holen?
- 29. Nutzungsrichtlinien: geteilte gegen normale Zeiger
- 30. Schleife für txt geteilte Datei
klingt wie ein Hausaufgaben ..., was Sie bisher getan versuchen ? Wo ist das Problem? – MrSimpleMind
Wahrlich Hausaufgaben, sorry, wir können nicht helfen: D Versuchen Sie es, produzieren Sie einen Fehler, posten Sie Ihren Code hier und fragen Sie nach diesem bestimmten Fehler;) –