📌  相关文章
📜  数组中的唯一元素,其中所有元素出现 k 次,只有一次除外(1)

📅  最后修改于: 2023-12-03 14:54:59.748000             🧑  作者: Mango

数组中的唯一元素,其中所有元素出现 k 次,只有一次除外

问题描述:给定一个整数数组,其中每个元素都出现了 k 次,只有一个元素出现了一次。找出出现了一次的那个元素。

解决方法:根据位运算的思想,将所有元素的二进制表示的每一位分别相加,得到的结果对 k 取余,最后余数不为 0 的那一位就是出现了一次的那个元素在该位上为 1 的那一位。

代码实现:

def find_unique(nums, k):
    # 记录每一位上出现 1 的次数
    bit_counts = [0] * 32
    for num in nums:
        for i in range(32):
            bit_counts[i] += num & 1
            num >>= 1

    # 对每一位上出现次数对 k 取余,得到的余数就是出现一次的那一位
    bit_counts = [cnt % k for cnt in bit_counts]

    # 将余数组成二进制数,得到出现一次的那个数
    res = 0
    for i in range(31, -1, -1):
        res <<= 1
        res |= bit_counts[i]
    return res

测试:

assert find_unique([2, 2, 5, 5, 3, 3, 7, 7, 6, 6, 1, 8, 8, 9, 9], 2) == 1
assert find_unique([2, 2, 5, 5, 3, 3, 7, 7, 6, 6, 1, 8, 8, 9, 9, 10, 10, 12, 12, 14, 14, 16], 2) == 1
assert find_unique([1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10], 3) == 10
assert find_unique([1], 5) == 1

时间复杂度:$O(n)$,其中 $n$ 是数组的长度。

空间复杂度:$O(1)$。