Given an 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?
以后先自己想一种算法,然后在参照别人的一种算法
python快速版本,之前没有想着优化空间和时间吧。
class Solution(object):
def singleNumber(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
dic ={}
for num in nums:
if str(num) not in dic:
dic[str(num)] = 0
else:
dic[str(num)] =1
for key in dic:
if dic[key]==0:
return int(key)
#时间复杂度为O(n),空间复杂度为S(n)
别人用异或来解决,这个问题能够解决空间复杂度的问题
class Solution:
# @param A, a list of integer
# @return an integer
def singleNumber(self, A):
ans = A[0]
for i in range(1, len(A)):
ans = ans ^ A[i]
return ans
这位同学利用python的set来解决重复的问题,平时写代码的时候蛮好用的,不过并没有解决时间和空间问题么? 以后可以先set再list解决python中间重复项的问题。
class Solution(object):
def singleNumber(self, nums):
return sum(list(set(nums)))*2 - sum(nums)
javascript二刷,异或用^
/**
* @param {number[]} nums
* @return {number}
*/
var singleNumber = function(nums) {
var aa = nums[0];
for(var i=1;i<nums.length;i++){
aa = aa ^ nums[i];
}
return aa;
};
下面这种92.06%,就是把nums.length预先存好。
/**
* @param {number[]} nums
* @return {number}
*/
var singleNumber = function(nums) {
var aa = nums[0];
var ll = nums.length
for(var i=1;i<ll;i++){
aa = aa ^ nums[i];
}
return aa;
};