Leetcode 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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值