题目

WeChatdb3be5b88389ef765f2bf223c324ce60.png

我的思路

存入dict中,key存数字,value存counter。存完后,一定有个counter为1,所以list(dict.values()).index(1)找到对应的index,并根据list(dict.keys())[index]找到对应的key。(这个方法以前有用到过)

  1. class Solution:
  2. def singleNumber(self, nums: List[int]) -> int:
  3. dict = {}
  4. for num in nums:
  5. if(num in dict):
  6. dict[num] += 1
  7. else:
  8. dict[num] = 1
  9. result = list(dict.keys())[list(dict.values()).index(1)]
  10. return result

高智商xor方法

原理:相同数字xor会得到00…0, 00…0 xor 任一数字得到数字本身。结果就是所有出现两次的数字都因为xor自己而抵消,最后只留下出现一次的数字。

  1. class Solution:
  2. def singleNumber(self, nums: List[int]) -> int:
  3. for i in range(1, len(nums)):
  4. nums[0] ^= nums[i]
  5. return nums[0]