배열의 가능한 모든 하위 집합의 합을 구하는 코드를 작성했습니다. 예상되는 출력을 얻고 있지만 시간과 관련된 테스트 사례를 지울만큼 빠르지 못합니다.배열의 모든 가능한 하위 집합의 합이
속도에 맞게 코드를 최적화 할 수있는 사람이 있습니까?
첫 번째 입력 (testcases)은 테스트 케이스의 수입니다. 테스트 케이스의 수에 따라 array (size) 및 array 요소 (set)의 크기를 갖습니다.
예를 들어, 유효한 입력 될 것이다 :
1
은을 testcases의 개수 :1 3 2 3 5
.
3
은 테스트 세트의 크기이고2 3 5
은 입력 세트의 요소입니다.
예상 출력은 다음
는
71
상기 출력 값의 계산은 다음
{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();
}
}
당신은 문제를 명확히 수 있을까? 내가 올바르게 이해한다면 알고리즘은'(2 * 3) + (2 * 5) + (2 * 3 * 5) + (3 * 5) = 61'을 계산해야합니다. – Turing85
개별 요소도 유효한 하위 집합입니다. '61'에'2 + 3 + 5'를 추가해야합니다. 그래서 당신은'71'을 얻습니다. – anacron
내가 생각하는 코드를 최적화하려고하십니까? "시간과 관련된 테스트 사례를 정리하기에 충분히 빠릅니다." – 7663233