3514.不同 XOR 三元组的数目 II:两轮异或(异或结果放集合)
【LetMeFly】3514.不同 XOR 三元组的数目 II:两轮异或(异或结果放集合)
力扣题目链接:https://leetcode.cn/problems/number-of-unique-xor-triplets-ii/
给你一个整数数组 nums 。
XOR 三元组 定义为三个元素的异或值 nums[i] XOR nums[j] XOR nums[k],其中 i <= j <= k。
返回所有可能三元组 (i, j, k) 中 不同 的 XOR 值的数量。
示例 1:
输入: nums = [1,3]
输出: 2
解释:
所有可能的 XOR 三元组值为:
(0, 0, 0) → 1 XOR 1 XOR 1 = 1(0, 0, 1) → 1 XOR 1 XOR 3 = 3(0, 1, 1) → 1 XOR 3 XOR 3 = 1(1, 1, 1) → 3 XOR 3 XOR 3 = 3
不同的 XOR 值为 {1, 3} 。因此输出为 2 。
示例 2:
输入: nums = [6,7,8,9]
输出: 4
解释:
不同的 XOR 值为 {6, 7, 8, 9} 。因此输出为 4 。
提示:
1 <= nums.length <= 15001 <= nums[i] <= 1500
解题方法:两轮异或
$nums[i]$最大值是$1500$,二进制下最多$11$位,$nums[i]\oplus nums[j]$最大值不超过$2^{11}=2048$。
我们可以二重遍历$nums$数组,把XOR二元组放入集合$can2$中;再次二重遍历$nums$数组和$can2$集合,把XOR三元组放入集合$can3$中。$size(can3)$即为所求。
- 时间复杂度$O(n^2+nm)$,其中$n=len(nums)$,$m=\max nums[i]$
- 空间复杂度$O(m)$
关于官方题解的方法二,实际上只是把二重遍历$nums$数组得到XOR二元组这一步做了个优化,先把$nums$数组中的元素放到哈希表中去了个重,然后使用数组模拟了集合。
AC代码
C++
1 | |
同步发文于CSDN和我的个人博客,原创不易,转载经作者同意后请附上原文链接哦~
千篇源码题解已开源
3514.不同 XOR 三元组的数目 II:两轮异或(异或结果放集合)
https://blog.letmefly.xyz/2026/07/24/LeetCode 3514.不同XOR三元组的数目II/