1442.形成两个异或相等数组的三元组数目
链接:1442.形成两个异或相等数组的三元组数目
难度:Medium
标签:位运算、数组、哈希表、数学、前缀和
简介:请返回能够令 a == b 成立的三元组 (i, j , k) 的数目。
题解 1 - typescript
- 编辑时间:2021-05-18
- 执行用时:148ms
- 内存消耗:39.8MB
- 编程语言:typescript
- 解法介绍:前缀和。
function countTriplets(arr: number[]): number {
const len = arr.length;
if (len === 1) return 0;
let ans = 0;
const prefixSumList: number[] = [ans, ...arr.map(v => (ans ^= v))];
ans = 0;
for (let k = 1; k < len; k++) {
for (let j = 1; j <= k; j++) {
for (let i = 0; i < j; i++) {
const a = prefixSumList[j] ^ prefixSumList[i];
const b = prefixSumList[k + 1] ^ prefixSumList[j];
if (a === b) ans++;
}
}
}
return ans;
}
题解 2 - typescript
- 编辑时间:2021-05-18
- 执行用时:100ms
- 内存消耗:40.3MB
- 编程语言:typescript
- 解法介绍:在前后相等的情况下,可取任意 j。
function countTriplets(arr: number[]): number {
const len = arr.length;
if (len === 1) return 0;
let ans = 0;
const prefixSumList: number[] = [ans, ...arr.map(v => (ans ^= v))];
ans = 0;
for (let k = 1; k < len; k++) {
for (let i = 0; i < k; i++) {
if (prefixSumList[k + 1] === prefixSumList[i]) ans += k - i;
}
}
return ans;
}