Ich habe einen Code geschrieben, um Summe des Produkts aller möglichen Teilmengen von Array zu finden. Ich bekomme die erwartete Ausgabe, aber ich kann es nicht schnell genug machen, um zeitbezogene Testfälle zu löschen.Summe des Produkts aller möglichen Teilmengen von Array
Kann mir jemand bei der Optimierung meines Codes für Geschwindigkeit helfen?
Die erste Eingabe (testCases) ist die Anzahl der Testfälle. Abhängig von der Anzahl der Testfälle haben wir die Größe der Array- (Größe) und Array-Elemente (Set).
Zum Beispiel eine gültige Eingabe wäre:
1
3
2 3 5
wo:
1
die Anzahl der Testfälle ist.3
ist die Größe des Testsets und2 3 5
sind die Elemente des Eingabesets.
die erwartete Ausgabe ist:
71
Die Berechnung für die oben genannte Ausgabe ist:
{2}, {3}, {5}, {2, 3}, {3, 5}, {2, 5}, {2, 3, 5}
=> 2 3 5 6 15 10 30
=> 2 + 3 + 5 + 6 + 15 + 10 + 30
=> 71
import java.util.Scanner;
public class Test {
static int printSubsets(int set[]) {
int n = set.length;
int b = 0;
for (int i = 0; i < (1 << n); i++) {
int a = 1;
for (int j = 0; j < n; j++){
if ((i & (1 << j)) > 0) {
a *= set[j];
}}
b += a;
}
return b;
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int testCases = scanner.nextInt();
for (int i = 0; i < testCases; i++) {
int size = scanner.nextInt();
int set[] = new int[size];
for (int j = 0; j < set.length; j++) {
set[j] = scanner.nextInt();
}
int c = printSubsets(set);
System.out.println((c - 1));
}
scanner.close();
}
}
Können Sie Ihr Problem klären? Wenn ich Sie richtig verstehe, sollte Ihr Algorithmus '(2 * 3) + (2 * 5) + (2 * 3 * 5) + (3 * 5) = 61 'berechnen. – Turing85
Die einzelnen Elemente sind ebenfalls gültige Teilmengen. Sie müssen '2 + 3 + 5' zu' 61' hinzufügen. So bekommst du '71'. – anacron
Sie möchten Ihren Code optimieren, nehme ich an? "schnell genug, um zeitbezogene Testfälle zu löschen." – 7663233