📅  最后修改于: 2023-12-03 15:12:05.089000             🧑  作者: Mango
给定一个整数类型的数组 nums,找到其中所有满足条件的数字对 (i, j):
其中 i < j 且 nums[i] & nums[j] > nums[i] ^ nums[j]。
计算给定数组中按位与超过按位XOR的对。
首先需要明确,按位与的结果表示为两个数的二进制按位上的与,按位异或的结果表示为两个数的二进制按位上的异或。
因此,题目所求的即为满足条件 nums[i] & nums[j] > nums[i] ^ nums[j] 的数字对数。
我们可以使用两层 for 循环来遍历数组中的每一个数字对,并判断是否满足条件即可。
class Solution:
def countPairs(self, nums: List[int]) -> int:
count = 0
# 遍历每一个数字对
for i in range(len(nums)):
for j in range(i+1, len(nums)):
# 判断是否满足条件
if nums[i] & nums[j] > nums[i] ^ nums[j]:
count += 1
return count
此算法的时间复杂度是 $O(n^2)$,因为需要使用两层 for 循环来遍历每一个数字对。
空间复杂度为 $O(1)$,因为只需要常量级别的额外空间来记录数字对的数量。
本题可以通过暴力法来解决,但时间复杂度较高,无法通过全部测试用例,需要寻找更优秀的解法。
答案中的代码仅作示范,不能作为最终解答,仅供参考。