/** * @param {number[]} arr * @return {number} */ var countTriplets = function(arr) { let n = arr.length; let dp = new Array(n).fill(0); let res = []; let count=0; for(let i = 0;i<n;i++){ dp[i] = (i==0?0:dp[i-1]) ^ arr[i]; if(dp[i] == 0){ res.push({‘i‘:0,‘k‘:i}); } } for(let i=0;i<n;i++){ for(let j=i+1;j<n;j++){ if((dp[i]^dp[j]) === 0){ res.push({‘i‘:i+1,‘k‘:j}); } } } while(res.length>0){ let cur = res.pop(); for(let j=cur.i+1;j<=cur.k;j++){ let left = (cur.i === j-1)?(dp[cur.i]^dp[cur.i-1]):(dp[cur.i-1]^dp[j-1]); let right = (cur.k===j)?(dp[cur.k]^dp[cur.k-1]):(dp[cur.k]^dp[j-1]); if( left === right){ count++; } } } return count; }; let arr = [2,3,1,6,7] console.log(arr, countTriplets(arr)) arr = [1,1,1,1,1] console.log(arr, countTriplets(arr)) arr =[2,3] console.log(arr, countTriplets(arr)) arr = [1,3,5,7,9] console.log(arr, countTriplets(arr)) arr = [7,11,12,9,5,2,7,17,22] console.log(arr, countTriplets(arr))
示例 1:
原文:https://www.cnblogs.com/yanjianjiang/p/14780140.html