2016-07-24 3 views
1
private static Stack<Integer> temp = new Stack<Integer>(); 

public void populateSubset(int[] DATA, int fromIndex, int endIndex, int target) { 

    if (sumInStack == target) { 
     check = true ; 
     Counter ++ ; 
     print(stack, target); 
    } 


    for (int currentIndex = fromIndex; currentIndex < endIndex; currentIndex++) { 

     if (sumInStack + DATA[currentIndex] <= target) { 
      stack.push(DATA[currentIndex]); 
      sumInStack += DATA[currentIndex]; 
      if (sumInStack >= MaxSumInStack){ 
        temp = stack;  
        MaxSumInStack = sumInStack; 

      } 

      populateSubset(DATA, currentIndex + 1, endIndex, target); 
      sumInStack -= (Integer) stack.pop(); 

     } 
    } 
} 

Java의 subsetSum 알고리즘에서 대상에 가장 가까운 값을 가진 서브 세트를 찾고 싶습니다. 알고리즘은 정확한 합이있는 하위 집합을 찾지 않습니다. sumInsStack을 업데이트 할 때마다 스택과 최대 합계를 찾는 합계를 저장합니다. 하지만 결국 임시 스택은 null이며 각 단계마다 가치가 있음에도 불구하고 아무 것도 없습니다. 나는 어떻게해야합니까? P.S : 모든 스택을 최대 값으로 인쇄하려고합니다.알고리즘이 스택을 사용하여 정확한 합계를 갖는 서브 세트를 찾지 못한 경우 대상에 가장 가까운 값을 갖는 서브 세트를 찾습니다.

temp = stack; 

에 의해 당신이 Stack의 복사본을 만들하려는 경우

+0

를 선언 stack'입니까? – Eran

+0

@Eran Before temp – Elnaz91

답변

1

, 그건 당신이하고있는 일이 아니다. temp 변수는 stack 변수와 동일한 Stack을 참조하므로 나중에 stack을 비우고 temp을 비 웁니다. 사본을 만들기 위해

, 당신은 명시 적으로 temp 스택에 원래 스택의 요소를 복사해야합니다 : 어디`

temp = new Stack<Integer>(); 
temp.addAll(stack); 
+0

감사합니다 작동합니다;) – Elnaz91