根据给定的模式在较大的int数组中查找所有可能的子数组合

时间:2018-06-10 09:16:45

标签: arrays data-structures pattern-matching

给定一个只有1和0的int数组,如[1,0,0,1,0,0,0,1],我想得到所有可能以1开始和结束的子数组。

在这种情况下,输出将是这三个数组:

  • [1,0,0,1]
  • [1,0,0,0,1]
  • [1,0,0,1,0,0,0,1]

这三种可能的组合。

我用O(n ^ 2)时间复杂度完成了它,但我想要更有效的解决方案。

哪种算法足以满足这种情况?我正在使用java进行实现。

1 个答案:

答案 0 :(得分:0)

如果你只是想找到以1开头和结尾的数组的数量,那么它可以通过一个简单的公式来解决。

问题减少到解决方案,即Number of ways to select any 2 indices of 1's in the given array

现在可以用公式给出:N(N-1)/ 2,其中N是给定数组中1的数。

所以你必须至少遍历一次整个数组。因此,时间复杂度降低到O(Size of Array) ~ O(n)