HackerRank-LonelyInteger问题:我的Python代码为何无法运行?
问题分析与解决
你的代码逻辑问题出在两个if是独立执行的,不是互斥的:
- 第一次遍历到
1时,第一个if判断1不在test里,把它加进列表;紧接着第二个if又判断1现在在test里,直接把它删掉了,所以第一次循环后test就空了。 - 第二次遍历到
1,第一个if不成立,第二个if判断1不在test里,啥也不做。 - 第三次遍历到
2,第一个if把2加进test,第二个if又立刻把它删掉,最后test自然是空的。
修正后的代码
把第二个if改成else,让添加和删除变成二选一的逻辑:
def lonely_integer(a): test = [] for i in a: if i not in test: test.append(i) else: test.remove(i) print(test[0]) # 直接输出唯一的元素 lonely_integer([1, 1, 2])
更高效的解法(异或运算)
因为题目里说除了目标数,其他数都出现两次,用异或运算更省空间(不需要额外列表):
- 相同的整数异或结果是
0 0和任何整数异或结果是这个整数本身
def lonely_integer(a): result = 0 for num in a: result ^= num print(result) lonely_integer([1, 1, 2])
内容的提问来源于stack exchange,提问作者yukee
相关产品推荐
相关产品推荐

