📌  相关文章
📜  反转每个数组元素的二进制表示形式后,计数剩余的数组元素(1)

📅  最后修改于: 2023-12-03 15:37:07.635000             🧑  作者: Mango

题目

给定一个整数数组 nums,对于其中的每个元素,将其二进制表示反转,然后返回剩余数组中的元素个数。

示例

输入: nums = [10,5,7,2]

输出: 4

解题思路

对于每个元素,我们可以将其转为二进制字符串,然后进行反转,再将其转回十进制整数。这样就可以得到反转后的数字了。

对于剩余元素的统计,我们只需要对每个反转后的数字进行判断,如果它不是0,就将计数器加一即可。

代码如下:

def reverseBits(num):
    binary = bin(num)[2:]
    binary = '0' * (32 - len(binary)) + binary
    reverse = binary[::-1]
    return int(reverse, 2)

def countBits(nums):
    count = 0
    for num in nums:
        if reverseBits(num) != 0:
            count += 1
    return count

复杂度分析

这里的时间复杂度主要取决于将数字转换为二进制字符串的操作,因为我们需要将每个数字的二进制表示都遍历一遍。这个操作的时间复杂度是 $O(n\log n)$。

然后我们还需要对每个二进制字符串进行反转,并将其转回十进制整数。这个操作的时间复杂度是 $O(n)$。

因此,总的时间复杂度是 $O(n\log n)$。

空间复杂度主要取决于存储每个数字的二进制字符串,以及它们的反转结果。这里的空间复杂度是 $O(n)$。