原题
Given a non-empty array of integers, every element appears twice except for one. Find that single one.
Note:
Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory?
Example 1:
Input: [2,2,1]
Output: 1
Example 2:
Input: [4,1,2,1,2]
Output: 4
Example 1:
Input: [7,1,5,3,6,4]
Output: 5
Explanation: Buy on day 2 (price = 1) and sell on day 5 (price = 6), profit = 6-1 = 5.
Not 7-1 = 6, as selling price needs to be larger than buying price.
Example 2:
Input: [7,6,4,3,1]
Output: 0
Explanation: In this case, no transaction is done, i.e. max profit = 0.
Reference Answer
思路分析
这道题相当简单,但是先直接想到最简单的策略还是有点烧脑,依据题目,只有一个出现了1次,结合异或运算,相同元素进行异或,结果为0,对整个数组进行异或操作,只剩下single number。
自己开始时候还想统计各数字出现次数,这种思路太蠢,太蠢。。
Code
class Solution:
def singleNumber(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
# num_dict = {}
# for count in nums:
# if count not in num_dict.keys():
# num_dict[count] = 1
# else:
# num_dict[count] += 1
# res = sorted(num_dict.items(), key = lambda num_dict:num_dict[1])
# return res[0][0]
base = 0
for count in nums:
base ^= count
return base