python找出只出现一次的数字_Python数组中只出现一次的数字
任何一个数字异或他自己都等于0,0异或任何一个数都等于那个数。数组中出了两个数字之外,其他数字都出现两次,那么我们从头到尾依次异或数组中的每个数,那么出现两次的数字都在整个过程中被抵消掉,那两个不同的数字异或的值不为0,也就是说这两个数的异或值中至少某一位为1。我们找到结果数字中最右边为1的那一位i,然后一次遍历数组中的数字,如果数字的第i位为1,则数字分到第一组,数字的第i位不为1,则数字分到第二组。这样任何两个相同的数字就分到了一组,而两个不同的数字在第i位必然一个为1一个不为1而分到不同的组,然后再对两个组依次进行异或操作,最后每一组得到的结果对应的就是两个只出现一次的数字。'''
一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。
'''
# -*- coding:utf-8 -*-
class Solution:
# 返回[a,b] 其中ab是出现一次的两个数字
def FindNumsAppearOnce(self, array):
if array == None or len(array) <= 0:
return []
resultExclusiveOr = 0
for i in array:
resultExclusiveOr ^= i
indexOf1 = self.FindFirstBitIs1(resultExclusiveOr)
num1, num2 = 0
for j in range(len(array)):
if self.IsBit1(array[j], indexOf1):
num1 ^= array[j]
else:
num2 ^= array[j]
return [num1, num2]
def FindFirstBitIs1(self, num):
indexBit = 0
while num & 1 == 0 and indexBit <= 32:
indexBit += 1
num = num >> 1
return indexBit
def IsBit1(self, num, indexBit):
num = num >> indexBit
return num & 1
class Solution2:
# 返回[a,b] 其中ab是出现一次的两个数字
def FindNumsAppearOnce(self, array):
if array == None or len(array) <= 0:
return []
resultExOr = self.ExOr(array)
i = 0
while resultExOr and i <= 32:
i += 1
resultExOr = resultExOr>>1
num1, num2 = [], []
for num in array:
if self.bitIs1(num, i):
num1.append(num)
else:
num2.append(num)
first = self.ExOr(num1)
second = self.ExOr(num2)
return [first, second]
def ExOr(self, aList):
ExOrNum = 0
for i in aList:
ExOrNum = ExOrNum ^ i
return ExOrNum
def bitIs1(self, n, i):
n = n >> (i-1)
return n & 1
aList = [2, 4, 3, 6, 3, 2, 5, 5]
s = Solution()
print(s.FindNumsAppearOnce(aList))
python找出只出现一次的数字_Python数组中只出现一次的数字相关推荐
- 从键盘输入10个互不相同的整数,找出其中最小的元素将其与数组中的第一个元素进行交换。
题目: /* 从键盘输入10个互不相同的整数,找出其中最小的元素将其与数组中的第一个元素进行交换. */ 代码: c++做的. #include<iostream> using names ...
- 《剑指offer》-- 第一个只出现一次的字符、数组中只出现一次的数字、字符流中第一个不重复的字符、数组中重复的数字
一.第一个只出现一次的字符: 1.题目: 在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写 ...
- php旋转数组找出最小的,LeetCode 153 寻找旋转排序数组中的最小值
链接:https://leetcode-cn.com/problems/find-minimum-in-rotated-sorted-array 假设按照升序排序的数组在预先未知的某个点上进行了旋转. ...
- 笔试算法题(28):删除乱序链表中的重复项 找出已经排好序的两个数组中的相同项...
出题:给定一个乱序链表,节点值为ASCII字符,但是其中有重复项,要求去除重复项并保证不改变剩余项的原有顺序: 分析:创建一个256(2^8)大小的bool数组,初始化为false,顺序读取链表,将字 ...
- 在哪里能收到python实例代码-Python找出最小的K个数实例代码
题目描述 输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,. 这个题目完成的思路有很多,很多排序算法都可以完成既定操作,关键是复 ...
- Python找出列表中出现次数最多的元素三种方式
通过三种方式给大家介绍,具体详情如下所示: 方式一: 原理:创建一个新的空字典,用循环的方式来获取列表中的每一个元素,判断获取的元素是否存在字典中的key,如果不存在的话,将元素作为key,值为列表中 ...
- linux 端口tnpl,利用Python找出9个连续的空闲端口
这篇文章主要介绍了Python找出9个连续的空闲端口的方法,感兴趣的小伙伴们可以参考一下 一.项目需求 安装某软件,配置时候需要填写空闲的端口.查看5个平台的某个端口是否被占用 5个平台为window ...
- 如何用 Python 找出某月的第一天
博客翻译自:https://www.mytecbits.com/internet/python/first-day-of-the-month Python 没有直接地方法获取某月的第一天,但只需要一些 ...
- python找出某个文件夹下某个后缀的文件
python找出某个文件夹下某个后缀的文件 import osdef find_files_with_suffix(folder_path, suffix):# 使用os模块获取文件夹中所有文件的路径 ...
最新文章
- 国内外交互体验很好的十款验证码
- Gardener and Tree 图论,树,队列
- java引用其他类的数据头文件_Java 实现数据表与简单Java类映射转换
- 计算机组成与系统结构+答案书,计算机组成与系统结构书本答案
- 一个列表中按钮的不同样式
- 【CodeForces - 474D】Flowers (线性dp)
- 背包问题学习笔记(二)
- CXF WebService 开发文档-目录索引
- LeetCode234题:回文链表
- 断点运行的参数_利用 AicLaunchAdminProcess 参数污染 bypass UAC
- linux服务器知识学习:linux系统的目录结构
- 学生a3制图标题栏尺寸手绘_机械制图基础知识学习,如何画好一张零件图?
- Java之打印指定月份日历
- sql查询表名、列名、列属性
- mastercam西门子840d后处理_西门子802D数控铣后处理程序
- 把Python代码封装成exe(windows的可执行程序)
- 时钟显示(C语言实现)
- Android——超简单悬浮窗使用教程
- Unity项目总结(已完成17项,持续更新ing,含商城、塔防、背包、动画、坦克大战等)
- 指针数组和指向指针的指针
热门文章
- 几种常用的优化方法梯度下降法、牛顿法、)
- 工业级路由器和家用路由器的区别_工业路由器和普通家用路由器有什么区别啊?工业路由器好不好用啊?...
- ES6——举个例子理解Promise的原理和使用
- lnmp搭建的常见错误
- org.tinygroup.databasebuinstaller-数据库结构及元数据自动创建
- Linux 下安装python软件包(pip、nose、virtualenv、distribute )
- Python学习预备
- 开发---推荐16个国外的源码下载网站
- ASPxGridView1单击,双击事件
- asp.net 分页控件