【问题标题】:Given a string which contains only ones and zeros, return the number of substrings with ones more than zeros给定一个仅包含 1 和 0 的字符串,返回大于 0 的子字符串的数量
【发布时间】:2021-09-20 08:55:09
【问题描述】:

假设 S 是一个只包含 0 和 1 的字符串,我想统计 S 中 0 的个数小于 1 的个数的非空子串的个数。

使用下面给出的蛮力方法,我们可以有一个算法在 O(n^2) 内解决这个问题:

moreOnes(s):
count = 0
n = s.len()

for i = 1 to n
    one = 0
    zero = 0
    for j = i to n
        if s[i] == '1'
            one++
        else
            zero++
        
        if one > zero
            count++

return count

但是我们能不能有一个算法具有更好的时间复杂度 O(n*logn) 或 O(n),空间复杂度从 O(1) 到 O(n)?

【问题讨论】:

    标签: algorithm subset string-decoding binary-string


    【解决方案1】:

    考虑一个数组 A[i],它包含范围 1..i 中的 1 的数量减去范围 1..i 中的零的数量。

    使用此数组,现在只需 O(1) 时间即可通过计算 A[j]-A[i-1] 来计算 i..j 中子字符串中 1 的数量减去零的数量。

    对于给定的端点 j,您希望找到所有起点 iA[j]-A[i-1]>0。等效地,您想知道有多少 A[i-1] 的值小于 A[j]。

    这可以通过Fenwick trees 解决:

    1. 循环 j
    2. 在 Fenwick 树中的位置 A[j] 添加 1
    3. 从 Fenwick 树中查找累积值,范围最大为 A[j]-1 - 这是以 j 结尾并满足多于零的所需属性的子字符串的数量。

    这将占用 Fenwick 树的 O(n) 空间和 O(nlogn) 时间,因为每次查找都是 O(logn)。

    (请注意,A[j] 可能会变为负数,而 Fenwick 树通常使用正数数据。您可以通过将 n 的恒定偏移量添加到 A[j] 来解决此问题,因此所有条目都是正数。)

    【讨论】:

    • 这真的很有帮助。这让我想到了this problem,就是找到速率最好的子串(num_ones / substring_length)。这个想法可以以某种方式适应吗?
    • 是的:一种方法是对 1 的最大速率进行二分搜索,并将这种方法用作子问题。假设我们想知道平均比率是否大于 x。我们可以从所有值中减去 x 并查看是否可以找到长度为 k 或更大的子数组,其中平均速率高于 0。话虽如此,还有更好的方法。例如,在进行二等分时,Kadane 的算法将比使用 Fenwick 树更有效。还有一种 O(n) 方法可以根据 A 的凸包堆栈计算最大平均速率(具有最小长度)。
    • @PeterdeRivaz 如果我们循环 j 并查找从 0 到 j-1 范围内的累积值,复杂度不会是 O(n^2 logn), n^2 因为你是循环 j然后agian从0循环到j-1,可以登录查找吗?
    • @גלעד ברקן 这里有一些凸包方法的代码和解释:just4once.gitbooks.io/leetcode-notes/content/leetcode/…
    • 我研究了归因于 Kai-min Chung, Hsueh-I Lu - An Optimal Algorithm for the Maximum-Density Segment Problem. 2008 第 3 节的船体方法。我想我们有一个船体,因为我们在几何上比较了prefix_sum / length 的斜率,但是那里的算法更加细微,因为我们必须在迭代期间确定要查看的正确点。你是否直观地理解了他们的算法只是可视化一个凸包?我觉得这很难做到。如果您能抽出一点时间来提示如何操作,我将不胜感激。
    猜你喜欢
    • 2022-11-22
    • 1970-01-01
    • 1970-01-01
    • 2018-05-15
    • 2021-12-26
    • 1970-01-01
    • 2010-10-25
    • 2011-03-18
    • 2011-03-10
    相关资源
    最近更新 更多