• 898.Bitwise ORs of Subarrays


    We have an array A of non-negative integers.

    For every (contiguous) subarray B = [A[i], A[i+1], ..., A[j]] (with i <= j), we take the bitwise OR of all the elements in B, obtaining a result A[i] | A[i+1] | ... | A[j].

    Return the number of possible results. (Results that occur more than once are only counted once in the final answer.)

    Example 1:

    Input: [0]
    Output: 1
    Explanation:
    There is only one possible result: 0.

    Example 2:

    Input: [1,1,2]
    Output: 3
    Explanation:
    The possible subarrays are [1], [1], [2], [1, 1], [1, 2], [1, 1, 2].
    These yield the results 1, 1, 2, 1, 3, 3.
    There are 3 unique values, so the answer is 3.

    Example 3:

    Input: [1,2,4]
    Output: 6
    Explanation:
    The possible results are 1, 2, 3, 4, 6, and 7.

    Note:

    1. 1 <= A.length <= 50000
    2. 0 <= A[i] <= 10^9

    Solution1:(TLE)

    class Solution:
        def subarrayBitwiseORs(self, A):
            """
            :type A: List[int]
            :rtype: int
            """
            s = set()
            for i in range(len(A)): #start with i
                for j in range(i,len(A)): #end with j
                    res = A[i]
                    for t in range(i+1,j+1):
                        res = res | A[t]
                    s.add(res)
            return len(s)
    

    65 / 83 test cases passed.
    O(n3)
    Solution2:(TLE)

    class Solution:
        def subarrayBitwiseORs(self, A):
            """
            :type A: List[int]
            :rtype: int
            """
            s = set()
            for i in range(len(A)): #start with i
                for j in range(i,len(A)): #end with j
                    subarray = set(A[i:j+1])
                    res = 0
                    for t in subarray:
                        res = res | t
                    s.add(res)
            return len(s)
    

    65 / 83 test cases passed.
    a little optimization, remove the same elements in subarray.
    O(n3)

    Solution3:(TLE)

    class Solution:
        def subarrayBitwiseORs(self, A):
            """
            :type A: List[int]
            :rtype: int
            """
            s = set()
            for i in range(len(A)): #start with i
                temp = A[i]
                for j in range(i,len(A)): #end with j
                    temp = temp | A[j]
                    s.add(temp)
            return len(s)
    

    70 / 83 test cases passed.
    Similar with prefix sum,still can't work.
    O(n2)

    Solution4:

    class Solution:
        def subarrayBitwiseORs(self, A):
            """
            :type A: List[int]
            :rtype: int
            """
            s1 = set()
            s1.add(A[0])
            res = set(A)
            for i in range(1,len(A)):
                s2 = set()
                for t in s1:
                    s2.add(t|A[i])
                s2.add(A[i])
                for t in s2:
                    res.add(t)
                s1 = s2 #保存到i的所有或的结果
            return len(res)
    
  • 相关阅读:
    maven
    shell脚本--循环结构
    vi编辑器的使用
    数据对象映射模式
    shell脚本--逻辑判断与字符串比较
    shell脚本--分支、条件判断
    shell脚本--数值比较
    shell脚本--文件测试
    sublime text3修改默认配置文件是失败的解决方法
    shell脚本--显示文本内容
  • 原文地址:https://www.cnblogs.com/bernieloveslife/p/9755302.html
Copyright © 2020-2023  润新知