给定一个只有1和0的int数组,如[1,0,0,1,0,0,0,1],我想得到所有可能以1开始和结束的子数组。
在这种情况下,输出将是这三个数组:
这三种可能的组合。
我用O(n ^ 2)时间复杂度完成了它,但我想要更有效的解决方案。
哪种算法足以满足这种情况?我正在使用java进行实现。
答案 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)
。