题目描述

一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。
 
思路
将数组的因为就两个数只出现一次,所以,这些数字做异或之后,得到的结果是这两个数做异或的结果,比如  1 2 1 2 3       4 5 5 4 7  做完异或就是3^7   011^111=100
在最后的结果中,从右往左找出现的第一个1,发现在第三位,把100取出来,对原数组每个数进行与运算,与左边与得到的结果都是0   与右边做与运算得到的结果都是1,这样就可以找到这两个子数组了,按这两个子数组里面每个数做异或,就得到了两个数组
中出现一次的数  3  和   7    神奇
 # -*- coding:utf-8 -*-
class Solution:
# 返回[a,b] 其中ab是出现一次的两个数字
def FindNumsAppearOnce(self, array):
# write code here
if len(array)<2:
return None
tmpnum = None
for num in array:
if tmpnum==None:
tmpnum = num
else:
tmpnum ^=num
count = 0
while tmpnum%2==0:
tmpnum = tmpnum >>1
count +=1
mask = 1 << count
firstNum = None
secondNum = None
for num in array:
if num&mask == 0:
if firstNum == None:
firstNum = num
else:
firstNum ^=num
else:
if secondNum == None:
secondNum = num
else:
secondNum ^= num
return firstNum,secondNum

2019-12-23 14:58:21

最新文章

  1. HTTP学习笔记(1)ULR语法
  2. oracle删除当前用户下所有表
  3. codeforce ---A. Milking cows
  4. 类别sort使用排序
  5. at System.Data.EntityClient.EntityConnection.GetFactory(String providerString)
  6. ListView random IndexOutOfBoundsException on Froyo
  7. angular或者js如何确定选中ul中的哪几个li
  8. PHP封装数据库连接
  9. UML之状态图
  10. ffmpeg CLI常用命令
  11. EntityFramework Code-First 简易教程(八)-------一对一
  12. Java集合实现类区别与联系
  13. Hyper-V虚拟机上安装一个图形界面的Linux系统
  14. [Linux|DBA]运维三十六计
  15. 工作中遇到的问题收集--.NET
  16. WPF 颜色渐变
  17. unity--------------------四元数的旋转与原理
  18. spring boot 使用@ConfigurationProperties
  19. SharePoint PerformancePoint开发实例
  20. offset()和position()

热门文章

  1. 【VS开发】MFC运行时库与debug、release版本之间的配置关系
  2. 【linux开发】IO端口和IO内存的区别及分别使用的函数接口
  3. FTL2
  4. Python3图片处理头像
  5. 关闭mysql查询缓存query cache(用户测试性能)
  6. python_操作MySQL 初解 之__&lt;类方法调用并 增-删-改-查&gt;
  7. SpringMVC实现全局异常处理器 (转)
  8. TCP/IP 协议是如何保证数据可靠性的?
  9. selenium与页面交互
  10. java.util.MissingFormatArgumentException: Format specifier &#39;%s&#39;