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