leetcode-188周赛-5405- 形成两个异或相等数组的三元组数目

题目描述:

 

 

 

 

 

 提交:O(N3)

class Solution:
    def countTriplets(self, arr: List[int]) -> int:
        # count = 0
        # for i in range(len(arr)):
        #     for j in range(i+1,len(arr)):
        #         for k in range(j,len(arr)):
        #             a = reduce(lambda x,y:x^y,arr[i:j])
        #             b = reduce(lambda x,y:x^y,arr[j:k+1])
        #             if a == b:
        #                 count += 1
        # return count
    
        
        count = 0
        dp = [[0] * len(arr) for _ in range(len(arr))]

        for i in range(0, len(arr)):
            for j in range(i, len(arr)):
                if i == j:
                    dp[i][j] = arr[i]
                else:
                    dp[i][j] = dp[i][j - 1] ^ arr[j]
        # print(dp)
        for j in range(1, len(arr)):
            for k in range(j, len(arr)):
                for i in range(0, j):
                    if dp[j][k] == dp[i][j-1]:
                        count += 1
                        # print((i,j,k))
        return count

优化:O(N2)

class Solution:
    def countTriplets(self, arr: List[int]) -> int:
        a = arr
        n = len(a)
        r = 0
        for i in range(n):
            c = Counter()
            x = 0
            for j in range(i, -1, -1):
                x ^= a[j]
                c[x] += 1
            x = 0
            for j in range(i+1, n):
                x ^= a[j]
                r += c[x]
        return r

 

posted @ 2020-05-10 21:48  oldby  阅读(147)  评论(0编辑  收藏  举报