给定一个二进制数组。找出0大于1的子数组的个数?
我已经想出了一个朴素的O(N2)解决方案,有没有可能变得更好?
调用F[i]是从a[1]到a[i]的位1的个数;G[i]表示从a[1]到a[i]的0位的个数。所以我们需要找到i,j (0<=i
可以取O(N^2)但是如果我们变换表达式
F[j] - F[i]
& lt; =比;F[j] - G[j] 如果我们调用C[i] = F[i]- G[i],所以:
(*) & lt; =比;C [j] & lt;C[我]。
问题将变成:找到i