如何计算4x3数组中的所有可能结果?

时间:2018-12-21 20:23:40

标签: javascript c# vb.net

假设数组看起来像这样。

var res = [2,4,1,6,
           1,1,2,8,
           5,6,7,1];

此数组的所有可能的四个象限组合均为81。

在此示例中,索引只有一个组合:4,5,2,11,即四个1。

我的问题是如何计算它们。

谢谢。

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/