[leetcode] 1442. Count Triplets That Can Form Two Arrays of Equal XOR

本文解析了一道编程问题,介绍如何通过遍历和异或操作找出数组中满足a^b=0的三元组(i, j, k),即arr[i:j]和arr[j:k]的XOR相等。通过实例演示和代码实现,展示了如何利用这种规律快速求解。
摘要由CSDN通过智能技术生成

Description

Given an array of integers arr.

We want to select three indices i, j 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 (i, j 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

分析

题目的意思是:给你一个数组,找出具有相同XOR值的三元组,如果需要a==b,则a^b=0,如果了解这个,则解法就出来了,找出所有异或为0的子数组就行了,如果一个子数组有N个元素,就能构成n-1个三元组。如果能够找到这个规律,解法就出来了。

代码

class Solution:
    def countTriplets(self, arr: List[int]) -> int:
        n=len(arr)
        res=0
        for i in range(n-1):
            xor=0
            for j in range(i,n):
                xor^=arr[j]
                if(xor==0):
                    res+=j-i
        return res

参考文献

[LeetCode] Easy to understand Python solution, O(N^2) time, O(1) space

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

农民小飞侠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值