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/