數(shù)組
描述:數(shù)組中有一個數(shù)字出現(xiàn)了一次上陕,其他數(shù)字出現(xiàn)了兩次,找出只出現(xiàn)一次的數(shù)字
思路異或操作:
array=[1,1,2,2,3]
ret=0
for item in array:
ret^=item
print(ret)
字符
和數(shù)組思路類似拓春,不同的是需要將字符在unicode和ASCII編碼之間轉換释簿,轉成unicode編碼使用ord(char),轉成ASCII編碼使用chr()
代碼如下:
mystr=['a','a','b','b','c']
ret=0
for item in mystr:
ret^=ord(item)
print(chr(ret))
改進版本
有兩個數(shù)字在數(shù)組中出現(xiàn)了一次硼莽,其余數(shù)字在數(shù)組中出現(xiàn)了兩次:
思路1:
同樣異或操作得到兩個數(shù)異或的結果之后庶溶,根據(jù)異或結果中末尾第一次出現(xiàn)1作為基準,將數(shù)組分成兩部分得到a b結果懂鸵,算法如下:
ret=0
for item in array:
ret^=item
sep=1
#說明sep的結果這一位是0
while sep&ret==0:
sep=sep<<1
a=0
b=0
for item in array:
if item&sep:
a^=item
else:
b^=item
res=[a,b] if a<b else res=[b,a]
思路二:
將數(shù)組排序偏螺,判斷相鄰元素是否相同的方法:
array=sorted(array)
res=[]
i=0
l=len(array)
while(i<l-1):
if len(res)==2:
break
elif array[i]==array[i+1]:
i+=2
else:
res.append(array[i])
i+=1
if len(res)==1:
res.append(array[l-1])
return res