zoukankan      html  css  js  c++  java
  • 【leetcode】1442. Count Triplets That Can Form Two Arrays of Equal XOR

    题目如下:

    Given an array of integers arr.

    We want to select three indices ij and k where (0 <= i < j <= k < arr.length).

    Let's define a and b as follows:

    • a = arr[i] ^ arr[i + 1] ^ ... ^ arr[j - 1]
    • b = arr[j] ^ arr[j + 1] ^ ... ^ arr[k]

    Note that ^ denotes the bitwise-xor operation.

    Return the number of triplets (ij and k) Where a == b.

    Example 1:

    Input: arr = [2,3,1,6,7]
    Output: 4
    Explanation: The triplets are (0,1,2), (0,2,2), (2,3,4) and (2,4,4)
    

    Example 2:

    Input: arr = [1,1,1,1,1]
    Output: 10
    

    Example 3:

    Input: arr = [2,3]
    Output: 0
    

    Example 4:

    Input: arr = [1,3,5,7,9]
    Output: 3
    

    Example 5:

    Input: arr = [7,11,12,9,5,2,7,17,22]
    Output: 8

    Constraints:

    • 1 <= arr.length <= 300
    • 1 <= arr[i] <= 10^8

    解题思路:本题的关键是找出j,j的取值范围是1~len(arr)-1。对于任意的j,首先计算出左边XOR值出现的次数,然后再依次计算右边的XOR值,再去左边的XOR里面找出相同的值出现了几次即可。

    代码如下:

    class Solution(object):
        def countTriplets(self, arr):
            """
            :type arr: List[int]
            :rtype: int
            """
            res = 0
            for i in range(1,len(arr)):
                dic_left = {}
                value = arr[i-1]
                dic_left[value] = 1
                for j in range(i-2,-1,-1):
                    value = value ^ arr[j]
                    dic_left[value] = dic_left.setdefault(value,0) + 1
                value = None
                for j in range(i,len(arr)):
                    if value == None:value = arr[j]
                    else:value = value ^ arr[j]
                    if value in dic_left:
                        res += dic_left[value]
            return res
  • 相关阅读:
    3月18
    线段树求后继+环——cf1237D
    排序+stl——cf1237C
    思维+双指针+环——cf1244F
    模拟+双指针——cf1244E
    树的性质——cf1244D
    数学思维——cf1244C
    树的直径变形——cf1238F
    ac自动机暴力跳fail匹配——hdu5880
    状态压缩dp增量统计贡献——cf1238E(好题)
  • 原文地址:https://www.cnblogs.com/seyjs/p/13041630.html
Copyright © 2011-2022 走看看