假设数组看起来像这样。
var res = [2,4,1,6,
1,1,2,8,
5,6,7,1];
此数组的所有可能的四个象限组合均为81。
在此示例中,索引只有一个组合:4,5,2,11,即四个1。
我的问题是如何计算它们。
谢谢。
答案 0 :(得分:1)
对于您要实现的目标,我还不太清楚。您是否要查找每个长度恰好为4的子集,其中包含所有相同的值?如果是这样,您可以使用以下朴素算法在N ^ 2的时间内完成此操作:
let quadrants = [];
res.forEach(checkElement => {
let possibility = [];
res.forEach((element, index) => {
if (element === checkElement) {
possibility.push(index);
}
});
if (possibility.length === 4) {
quadrants.push(possibility);
}
});
如果要考虑原始数组具有相同数量的4个以上并包含 all 个子象限的可能性,则需要将长度检查更改为{{1} },并在此末尾再增加一个步骤:计算所有列出的长度大于4的象限的幂集,过滤掉长度不为4的象限,然后将其连接到象限数组。 (您需要在计算象限的功率集之前从象限数组中删除长度大于4的每个象限,因此不会出现在最终结果中。)
如果这样做,则仅通过计算较长象限的长度4的子集,便可以优化最后一步;如果需要,请尝试以此作为指导:https://www.geeksforgeeks.org/print-subsets-given-size-set/