在一个班级中,每位同学都拿到了一张卡片,上面有一个整数。有趣的是,除了一个数字之外,所有的数字都恰好出现了两次。现在需要你帮助班长小C快速找到那个拿了独特数字卡片的同学手上的数字是什么。
要求:
设计一个算法,使其时间复杂度为 O(n),其中 n 是班级的人数。
尽量减少额外空间的使用,以体现你的算法优化能力。
测试样例
样例1:
输入:cards = [1, 1, 2, 2, 3, 3, 4, 5, 5]
输出:4
解释:拿到数字 4 的同学是唯一一个没有配对的。
输入:cards = [0, 1, 0, 1, 2]
输出:2
解释:数字 2 只出现一次,是独特的卡片。
def solution(cards): # 定义了一个名为 find_unique_card 的函数,它接受一个参数 cards,代表班级中同学们拿到的卡片上的整数列表
result = 0 #初始化一个变量 result 为 0。这个变量将用于存储通过异或运算得到的结果
for card in cards : #这是一个循环,遍历输入列表 cards 中的每一个元素
result ^= card #使用异或运算符 ^ 任何数与自身异或结果为 0,而 0 与任何数异或结果为该数。result 最终将存储那个唯一的数字。
return result #函数返回 result,即找到的唯一的数字
cards = [1, 1, 2, 2, 3, 3, 4, 5, 5]
print(solution(cards)) #调用 find_unique_card 函数,并将结果打印出来
def solution(cards): # 定义了一个名为 find_unique_card 的函数,它接受一个参数 cards,代表班级中同学们拿到的卡片上的整数列表
result = 0 #初始化一个变量 result 为 0。这个变量将用于存储通过异或运算得到的结果
for card in cards : #这是一个循环,遍历输入列表 cards 中的每一个元素
result ^= card #使用异或运算符 ^ 任何数与自身异或结果为 0,而 0 与任何数异或结果为该数。result 最终将存储那个唯一的数字。
return result #函数返回 result,即找到的唯一的数字
cards = [1, 1, 2, 2, 3, 3, 4, 5, 5]
print(solution(cards)) #调用 find_unique_card 函数,并将结果打印出来
'''
可以用if __name__ == "__main__":封装一个模块,作测试代码
'''
if __name__ == "__main__": #是一个常用的条件判断语句,其作用主要是区分当前脚本是作为主程序直接运行还是被作为模块导入到其他脚本中。
cards = [1, 1, 2, 2, 3, 3, 4, 5, 5]
print(solution(cards)) #调用 find_unique_card 函数,并将结果打印出来
cards2 = [0, 1, 0, 1, 2]
print(solution(cards2))
在 Python 中,if __name__ == "__main__":
是一个常用的条件判断语句,其作用主要是区分当前脚本是作为主程序直接运行还是被作为模块导入到其他脚本中。以下是对它的详细解析:
__name__
变量
- 在 Python 中,每个模块都有一个名为
__name__
的内置变量。 - 当一个模块被直接运行时,
__name__
的值被设置为"__main__"
。 - 当一个模块被导入到其他模块中时,
__name__
的值被设置为模块的名称(不包括.py
扩展名)。
if __name__ == "__main__":
的作用
- 这个条件语句用于判断当前模块是否作为主程序直接运行。
- 如果当前模块是直接运行的,那么条件为真,语句块中的代码将被执行。
- 如果当前模块是被导入到其他模块中,那么条件为假,语句块中的代码将不会被执行。
- 实际应用场景
- 通常用于测试代码:可以在模块中编写一些测试函数或示例代码,并将它们放在
if __name__ == "__main__":
语句块中。这样,当直接运行该模块时,测试代码会被执行,而当该模块被导入到其他模块中时,测试代码不会被执行,避免了不必要的代码执行。 - 方便模块的复用:可以将一些通用的功能封装在一个模块中,并在
if __name__ == "__main__":
语句块中提供一些示例用法或测试用例。这样,其他开发者可以导入这个模块并使用其中的功能,而不会受到测试代码的干扰。
例如,在上述代码中:
if __name__ == "__main__":
cards = [1, 1, 2, 2, 3, 3, 4, 5, 5]
print(find_unique_card(cards))
如果这个脚本被直接运行,那么 cards
列表将被创建,并且 find_unique_card
函数将被调用,输出找到的唯一数字。如果这个脚本被作为模块导入到其他脚本中,这段代码将不会被执行,只有在其他脚本中明确调用 find_unique_card
函数时,该函数才会被执行。