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时,我都会存储堆栈和总和以找到最大总和。但是最终,临时堆栈为空,其中没有任何内容,尽管在每个步骤中它都获得了价值。我该怎么办?
附注:我还想打印所有带有最大值的纸叠。

最佳答案

如果通过

temp = stack;


您打算复制Stack,这不是您要执行的操作。您仅使temp变量引用与Stack变量相同的stack,因此以后您清空stack,也清空temp

为了进行复制,您必须将原始堆栈的元素显式复制到temp堆栈:

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

关于java - 如果算法未使用堆栈找到具有确切总和的子集,则查找与目标值最接近的子集,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38549669/

10-12 12:29
查看更多