题目简介:
给你一个整数数组 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:
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] |
提示:
1 <= arr.length <= 300
1 <= arr[i] <= 10^8
思路:周赛时候的一道题,本来以为三层循环过不了的…没想到竟然过了。首先是设置一个数组res[j][i] (i <= j)
代表arr[i]
到arr[j]
的异或总结果,将这个数组准备好以后,j
从0
开始,将res[j - 1][i]
和res[k][j]
的值进行比较,即a
和b
的比较。
a = arr[i] ^ arr[i + 1] ^ ... ^ arr[j - 1]
b = arr[j] ^ arr[j + 1] ^ ... ^ arr[k]
相等则数量+1。
代码如下:
1 | class Solution { |