青训营X豆包MarsCode 技术训练营找单独的数 | 豆包MarsCode AI 刷题

42 阅读1分钟

好的,让我们来分析一下这个问题。

问题理解

题目要求我们找到一个数组中唯一一个出现一次的数字。数组中的其他数字都恰好出现两次。

数据结构选择

由于题目要求时间复杂度为 O(n),并且尽量减少额外空间的使用,我们可以考虑使用位运算来解决这个问题。

算法思路

  1. 异或运算:异或运算有一个非常有用的性质:对于任何整数 xx ^ x = 0x ^ 0 = x。这意味着如果我们对数组中的所有元素进行异或运算,最终的结果就是那个唯一出现一次的数字。
    • 因为相同的数字异或结果为 0,而 0 与任何数字异或结果为该数字本身。

算法步骤

  1. 初始化一个变量 result 为 0。
  2. 遍历数组中的每一个元素,将 result 与当前元素进行异或运算。
  3. 遍历结束后,result 就是那个唯一出现一次的数字。

代码框架

你可以根据这个思路来完善你的代码:

def solution(cards):
    # 初始化结果变量为0
    result = 0
    
    # 遍历数组中的每一个元素
    for card in cards:
        # 将结果与当前元素进行异或运算
        result ^= card
    
    # 返回最终结果
    return result

if __name__ == "__main__":
    # 添加你的测试用例
    print(solution([1, 1, 2, 2, 3, 3, 4, 5, 5]) == 4)
    print(solution([0, 1, 0, 1, 2]) == 2)

希望这些思路能帮助你更好地解决这个问题!如果你有任何进一步的问题,欢迎继续提问。