40.数组中只出现一次的数字(python)
2024-09-02 20:54:17
题目描述
一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。
思路
将数组的因为就两个数只出现一次,所以,这些数字做异或之后,得到的结果是这两个数做异或的结果,比如 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
最新文章
- HTTP学习笔记(1)ULR语法
- oracle删除当前用户下所有表
- codeforce ---A. Milking cows
- 类别sort使用排序
- at System.Data.EntityClient.EntityConnection.GetFactory(String providerString)
- ListView random IndexOutOfBoundsException on Froyo
- angular或者js如何确定选中ul中的哪几个li
- PHP封装数据库连接
- UML之状态图
- ffmpeg CLI常用命令
- EntityFramework Code-First 简易教程(八)-------一对一
- Java集合实现类区别与联系
- Hyper-V虚拟机上安装一个图形界面的Linux系统
- [Linux|DBA]运维三十六计
- 工作中遇到的问题收集--.NET
- WPF 颜色渐变
- unity--------------------四元数的旋转与原理
- spring boot 使用@ConfigurationProperties
- SharePoint PerformancePoint开发实例
- offset()和position()
热门文章
- 【VS开发】MFC运行时库与debug、release版本之间的配置关系
- 【linux开发】IO端口和IO内存的区别及分别使用的函数接口
- FTL2
- Python3图片处理头像
- 关闭mysql查询缓存query cache(用户测试性能)
- python_操作MySQL 初解 之__<;类方法调用并 增-删-改-查>;
- SpringMVC实现全局异常处理器 (转)
- TCP/IP 协议是如何保证数据可靠性的?
- selenium与页面交互
- java.util.MissingFormatArgumentException: Format specifier &#39;%s&#39;