Leetcode 3514. Number of Unique XOR Triplets II
- Leetcode 3514. Number of Unique XOR Triplets II
- 1. 解题思路
- 2. 代码实现
- 题目链接:3514. Number of Unique XOR Triplets II
1. 解题思路
这一题是题目3513的进阶版本,其主要改动点就是数字不连续了,因此就无法保证前一题的取法总能被取到,我们就只能老老实实做动态规划了。
但是这道题还是多多少少做了些优化的,主要就是针对最大的数这块,首先保证了所有数均不大于1500,另外保证了总的数字也不会超过1500个,因此,事实上我们会得到的最大的结果就是2048,我们就可以针对其进行剪枝了。
其他的做法方面就没啥好说的了,首先就是求出来所有两个数的情况下能获得的值,然后将其与原数组进行遍历即可获得其最终3个数的所有可能组合,整体的算法复杂度就是 O ( N 2 ) O(N^2) O(N2)。
2. 代码实现
给出python代码实现如下:
class Solution:def uniqueXorTriplets(self, nums: List[int]) -> int:n = len(nums)cache = defaultdict(set)cache[1] = set(nums)cache[2].add(0)for i in range(n-1):x = nums[i]for j in range(i+1, n):y = nums[j]cache[2].add(x ^ y)for x in nums:for y in list(cache[2]):cache[3].add(x ^ y)if len(cache[3]) == 2048:return len(cache[3])return len(cache[3])
提交代码评测得到:耗时3279ms,占用内存18.4MB。