【问题标题】:Find the length largest subarray such that bitwise or operator equal to and找到长度最大的子数组,使得按位或运算符等于和
【发布时间】:2022-12-11 17:15:45
【问题描述】:

code iamge

请告诉我一个我无法得到问题的逻辑

【问题讨论】:

  • 请阐明您的具体问题或提供更多详细信息以准确突出您的需求。正如目前所写的那样,很难准确地说出你在问什么。

标签: arrays bit-manipulation operators bitwise-operators


【解决方案1】:

对于两位(或位模式)ab,当a=b时,我们只有a&b = a|b。所以你要求最大的子数组,其中所有条目都包含相同的值。

如果用子数组表示数组的切片,那么这意味着找到某个值的最长运行。扫描数组 A[] 并在辅助数组中记录当前值的重复次数。伪代码:

    val = A[0]
    count = 1
    for i = 1 to A.length - 1 do
        if A[i] = val then
            ++count
        else
            val = A[i]
            count = 1
        R[i] = count

现在找到 R 中的最大值,它将位于最长运行结束时的索引处:将此索引称为j。通过 A 向后工作以找到该运行的开始。伪代码:

    i = j
    val = A[j]
    while A[i] == val do 
        --i
    ++i
    ++j

现在你寻找的切片从 A[i] 开始到 A[j-1] 结束。根据各种编程语言中通常的切片约定,最后一个索引应该正好在切片之外。然后 A[i..j] 或类似的语言可以在这种语言中正常工作。这是一个线性时间算法。

【讨论】:

    猜你喜欢
    • 2016-12-20
    • 2017-03-16
    • 2023-04-04
    • 1970-01-01
    • 2022-09-24
    • 2019-12-25
    • 2012-11-08
    • 1970-01-01
    • 2012-10-22
    相关资源
    最近更新 更多