题目描述:
方法一:
思路:
出现了统计数组中元素出现次数的题目,可以使用字典来进行解决,而python当中字典处理这种题型很方便
代码实现:
class Solution(object):
def singleNumber(self, nums):
# 直接使用python当中的字典来进行判断是很方便的
counts = collections.Counter(nums)
for i in range(len(nums)):
if (counts[nums[i]] == 1):
return nums[i]
注意点:
- counts = collections.Counter(nums) 这一句实现的counts就是一个字典类型,其中键是数组的值,值是数组中元素出现的元素。
方法二:
- 方法一需要额外使用O(n) 的空间,其中n是数组长度。
- 做到线性时间复杂度和常数空间复杂度? 使用位运算即可,
- 异或运算的三个性质:
- 不清楚可以直接记住结论:数组中的全部元素的异或运算结果为数组中只出现一次的数字:-- 然后在配合性质一
class Solution {
public int singleNumber(int[] nums) {
// 数组中全部元素进行异或元素的结果就是数组中只出现一次的数字,
// 初始一开始和0做异或运算,因为和0做异或运算,结果仍然是原来的数
int kang = 0;
for (int num : nums){
kang = kang ^ num;
}
return kang;
}
}