• 【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
  • 相关阅读:
    终于,我还是对自己的博客下手了
    对字典进行排序
    小米官网的css3导航菜单
    背景色渐变
    处理手机上点击链接出现的蓝色边框
    如何修改HTML5 input placeholder 颜色
    自定义浏览器滚动条样式
    两行文字,固定宽高,超出部分以三点隐藏
    css3控制div上下跳动-效果图
    css3控制div上下跳动
  • 原文地址:https://www.cnblogs.com/seyjs/p/13041630.html
Copyright © 2020-2023  润新知