Bei einem Array besteht die Aufgabe darin, die größte teilbare Teilmenge im Array zu finden. Eine Teilmenge wird als teilbar bezeichnet, wenn für jedes Paar (x, y) in der Teilmenge entweder x y oder y x teilt.Größte teilbare Teilmenge im Array
Beispiel
Input: arr [] = {1, 16, 7, 8, 4} Output: 16 8 4 1 In der Ausgangsteilmenge, für jedes Paar, entweder das erste Element zweite aufteilt oder zweiteilt zuerst.
Input: arr [] = {2, 4, 3, 8} Ausgang: 8 4 2
Hier ist, was ich mit gekommen sind. Die Zeitkomplexität ist O (n^2). Kann es verbessert werden?
public static int[] largestDivisibleSubset2(int[] a){
Arrays.sort(a);
int index=0;
int maxDivCount=0;
for(int i=0;i<a.length;i++){
int currentDivCount=0;
for (int j=i;j<a.length;j++) {
if(a[j]%a[i]==0){
currentDivCount++;
}
}
if(currentDivCount>maxDivCount){
index = i;
maxDivCount = currentDivCount;
}
currentDivCount = 0;
}
int[] res = new int[maxDivCount];
int k=0;
for(int i=0;i<a.length;i++){
if(a[i]%a[index]==0){
res[k++] = a[i];
}
}
return res;
}
Hinweis: Sie müssen überprüfen, ob Ihr Element ist nicht 0, sonst erhalten Sie 'java.lang.ArithmeticException:/Nach zero' –
Wie groß sind die Zahlen? Es ist möglich, etwas wie "O (N * d + N * sqrt (MAX_VAL))", wobei "d" die maximale Anzahl von Divisoren für alle Elemente des Eingabearrays ist. – kraskevich
Könnten Sie mehr Informationen darüber geben, warum Sie sich Sorgen wegen zeitlicher Komplexität machen (über Einfachheit des Codes)? Vermutlich denkst du über eine große Anzahl von Gegenständen im Set nach? Wenn ja, wollen Sie Antworten, die eine Parellellisierung der Aufgabe beinhalten? – sprinter