1.字符串转数字
太简单了. 略.
2.考察异或
2.1 第一问
数组中有若干个整数, 只有一个出现了一次, 其他数字都出现了两次, 找出这个数字.
相同的数字, 异或结果是 0; 0 异或一个数字, 结果就是该数字.
根据这个特性, 数组内的元素迭代异或就是结果.
2.2 第二问
数组中有若干个整数, 只有两个出现了一次, 其他数字都出现了两次, 找出这两个数字.
- step1
还是逐个异或, 记不相同的数字为a与b, 那么结果result=a ^b. - step2
将result不断右移, 找到第一个为1的位的位置, 记为pos. 这就说明a与b在这一位上值不一样. - step3
把pos 位为1的筛选出来, 他们之间相互异或, 就得到了a. - step4
往原数组里添进去a, 问题转化成了第一问, 就找到了b.
2.3 代码
#python
def findAppearsOnce(arr):
result=0;
for num in arr:
result=result^num;
return result;
def findAppearsTwice(arr):
""" step1 """
result=0;
for num in arr:
result=result^num;
""" step2 """
pos=0;tmp=result;
while(True):
if(tmp & 1 !=0):
break;
pos+=1;
tmp=tmp>>1;
"""step 3"""
tmp=0
for num in arr:
if((num>>pos) & 1 != 0):
tmp=tmp^num;
result1=tmp;
"""step 4"""
arr.append(result1)
result2=findAppearsOnce(arr)
return result1,result2;
arr=[1,2,3,4,5,5,4,3,2,1,66]
arr2=[1,2,3,4,5,5,4,3,2,1,66,67]
print findAppearsOnce(arr)
print findAppearsTwice(arr2)