Tôi đã viết mã để tìm Tổng sản phẩm của tất cả các tập con có thể có của mảng. Tôi nhận được kết quả mong đợi nhưng tôi không thể làm cho nó đủ nhanh để xóa các trường hợp kiểm tra liên quan đến thời gian.Tổng sản phẩm của tất cả các tập hợp con có thể có của mảng
Có ai có thể giúp tôi tối ưu hóa mã của tôi về tốc độ không?
Đầu vào đầu tiên (testCases) là số lượng testcases. Tùy thuộc vào số lượng testcase, chúng ta sẽ có kích thước của mảng (size) và các phần tử mảng (set).
Ví dụ, một đầu vào hợp lệ sẽ là:
1
3
2 3 5
nơi:
1
là số testcases.3
là kích thước của bộ kiểm tra và2 3 5
là các thành phần của bộ đầu vào.
Sản lượng dự kiến là:
71
Việc tính toán cho sản lượng trên là:
{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();
}
}
Bạn có thể làm rõ sự cố của mình không? Nếu tôi hiểu bạn một cách chính xác, thuật toán của bạn nên tính toán '(2 * 3) + (2 * 5) + (2 * 3 * 5) + (3 * 5) = 61'. – Turing85
Các yếu tố riêng lẻ cũng là các tập hợp con hợp lệ. Bạn cần thêm '2 + 3 + 5' vào' 61'. Vì vậy, bạn nhận được '71'. – anacron
Bạn đang tìm cách tối ưu hóa mã của mình mà tôi cho là? "đủ nhanh để xóa các trường hợp kiểm tra liên quan đến thời gian". – 7663233