leetcode算法题 pro1442 形成两个异或相等数组的三元组数目
Posted TidalCoast
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode算法题 pro1442 形成两个异或相等数组的三元组数目相关的知识,希望对你有一定的参考价值。
leetcode算法题 pro1442 形成两个异或相等数组的三元组数目
原题地址:https://leetcode-cn.com/problems/count-triplets-that-can-form-two-arrays-of-equal-xor/
题目描述
给你一个整数数组 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) 的数目。
题目思路
如果直接按题目走,思考起来会有些困难,但是可以换一种思路去思考。由于需要使a==b,那么说明a^b也一定满足值为0,那么这道问题就可以简化为求全部异或的值为0的子串数。那么,思路大致就是
两次遍历数组,找出异或值为0的子串区间。满足的区间为[i,j,k],由于i < j <= k,所以j的取值可以为(i,k]范围内所有整数值,也就有k-i个区间。在遍历过程中,统计所有满足条件的区间数,就是所求的答案。
代码
两次遍历数组。
1 public int countTriplets(int[] arr) { 2 int result = 0; 3 for(int i=0;i<arr.length;i++){ 4 int sum = arr[i]; 5 for(int k=i+1;k<arr.length; k++){ 6 sum ^= arr[k]; 7 if(sum == 0) 8 result += (k-i); 9 } 10 } 11 return result; 12 }
以上是关于leetcode算法题 pro1442 形成两个异或相等数组的三元组数目的主要内容,如果未能解决你的问题,请参考以下文章
算法leetcode1442. 形成两个异或相等数组的三元组数目(rust真是好用)
LeetCode 1442. 形成两个异或相等数组的三元组数目
LeetCode:1442. 形成两个异或相等数组的三元组数目
LeetCode1442. 形成两个异或相等数组的三元组数目 / 剑指 Offer 46. 把数字翻译成字符串 / 剑指 Offer 47. 礼物的最大价值