形成两个异或相等数组的三元组数目
力扣 1442. 形成两个异或相等数组的三元组数目
题目说明
给你一个整数数组
arr。现需要从数组中取三个下标
i、j和k,其中(0 <= i < j <= k < arr.length)。a和b定义如下:a = arr[i] ^ arr[i + 1] ^ ... ^ arr[j - 1]b = arr[j] ^ arr[j + 1] ^ ... ^ arr[k]
注意:^ 表示 按位异或 操作。
请返回能够令
a == b成立的三元组 (i,j,k) 的数目。
- 提示:
1 <= arr.length <= 3001 <= arr[i] <= 10^8
示例
示例 1:
1 | 输入:arr = [2,3,1,6,7] |
示例 2:
1 | 输入:arr = [1,1,1,1,1] |
示例 3:
1 | 输入:arr = [2,3] |
示例 4:
1 | 输入:arr = [1,3,5,7,9] |
示例 5:
1 | 输入:arr = [7,11,12,9,5,2,7,17,22] |
笔者理解
此题是一道位运算算法问题,在力扣题库中被定义为中等题。
解法
当笔者阅读完此题后,发现此题中的a==b,其实就是a^b==0,此点需要注意,让我们来看看具体如何实现的吧。
实现
1 | public int countTriplets(int[] arr) { |
时间有点差,毕竟是三重循环,空间效率还行,可见此解法还比较适合此题;
总结
本题是今天的每日一题,难度是为中等,感兴趣的朋友都可以去尝试一下,此题还有其他更多的解法,朋友们可以自己逐一尝试。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 徐年の博客!








