寻找丢失的数字(二)
如果你还没有看过上一篇文章,请先移步看问题描述。
不管用什么方法,可以肯定的是我们至少需要扫描一遍序列。
因为只能扫描一遍,所以先求出 a XOR b,再根据结果分类的方法就不适用了。
既然我们不能根据某一位分类,那我们能否对所有位进行分类呢?比如,int是32位,我们可以对每一位都分成两类分别异或。
我们还要记录每一位上1出现的次数,实际上,只需要记录1出现奇数次还是偶数次就够了。
如果某一位上1出现奇数次,那么我们就知道 a 和 b 在此位上的比特不同。从而利用前面分类异或的结果就直接得出答案。
Python 代码:
""" returns the missing two numbers of sequence, which is supposed
to be a permutation of {1,..,n} with two numbers missing.
An one-pass algorithm.
"""
xors = [[0 for i in xrange(2)] for j in xrange(32)]
counts = [0 for i in xrange(32)]
for i in xrange(1, n + 1):
for k in xrange(32):
t = 1 & (i >> k)
xors[k][t] ^= i
counts[k] ^= t
for e in sequence:
for k in xrange(32):
t = 1 & (e >> k)
xors[k][t] ^= e
counts[k] ^= t
a, b = 0, 0
for k in xrange(32):
if counts[k]:
a, b = xors[k][0], xors[k][1]
break
return a, b
其实上面的方法稍加修改就可以解决此问,具体实现留给读者。有道类似题目http://yzfy.org/dis/listpost.php?tid=1009 可以用来测试你的算法~
转载于:https://www.cnblogs.com/shilcare/archive/2012/04/24/2468336.html
寻找丢失的数字(二)相关推荐
- JSK-115 单独的数字(二)【位运算】
单独的数字(二) 一个整型数组中有一个元素只出现一次,其它元素都出现两次.求出只出现一次的元素. 要求: 线性时间复杂度,不能使用额外空间. 聪明的你能搞定吗? 格式: 第一行输入数字n,代表有n个数 ...
- 查找数组中重复数字 (二)
#include <iostream> #include <string.h> using namespace std;void FindRepeatNum(int *arr, ...
- 一连串数字怎么转换成二维码?数字生成二维码如何制作?
当我们使用二维码内容做成数字时该如何制作呢,比如做成标签码,序号码,号码牌等等,都可以使用数字二维码来展示,那么如何操作才能将一连串数字做成二维码呢?下面给大家分享一下数字静态二维码和数字微信活码的制 ...
- MNIST手写数字识别 —— 图像分析法实现二分类
手写数字任务识别简介 MNIST 数据集来自美国国家标准与技术研究所(National Institute of Standards and Technology,简称 NIST ),总共有7万张图, ...
- python全栈学习总结二:数字、字符串、列表、元组、字典重要特点及方法
一 python中数据类型 整形:int 字符串:str 列表:list 元组:tuple 字典:dict 布尔值:bool 浮点型:float 一切皆对象,在python中,所有的数据类都是看做对象 ...
- OpenCV萌新福音:易上手的数字识别实践案例
摘要:信用卡识别的案例用到了图像处理的一些基本操作,对刚上手CV的人来说还是比较友好的. 本文分享自华为云社区<Python openCV案例:信用卡数字识别>,原文作者:深蓝的回音 . ...
- Java 数字转汉字工具类
Java 数字转汉字工具类 一.工具类--NumberToCnUtil package com.example.demotest.util;import java.util.Arrays; impor ...
- python项目二:多种验证码及二维码输出
python项目二:多种验证码及二维码输出 ` import os import qrcode import random import time import tkinter from pystri ...
- 网址二维码:如何制作网页链接二维码?
1994年,一家日本的公司发明了二维码,最开始是用来追踪旗下公司零部件的维修情况.在二维码上有不同的区域,标识不同的信息,比如对齐模式.定时模式.安静区域.版本信息.数据单元等. 现如今二维码和我们的 ...
最新文章
- 无线网中的一些技术名词和解释
- 赠书 | Python人脸五官姿态检测
- inner class java_Java Inner Class
- 更智能:人工智能与能源行业的革命
- 构建之法——软件工程概论、团队组织管理及开发流程
- VR中的白帽机制,这把安全的双刃剑应该如何使用?
- 开发日记-20190417 关键词 代码之间耦合度的一刀两断 (思路篇)
- Hbase写入量大导致region过大无法split问题
- python中的类及self详解_Python类class参数self原理解析
- 图解TCP数据报结构以及三次握手(非常详细)
- matlab编译器和程序发布
- oracle 小计 排序,使用SQL实现小计,合计以及排序
- Java开发和嵌入式开发该如何选择
- 分布式下的session问题
- 前端面试面向对象_面向初级前端开发人员的面试问题
- 喜大普奔!Django官方文档终于出中文版了
- Shiny 版混合线性模型的建模遍历
- linux网络使用情况分析工具
- 软件工程专业毕业计算机水平,软件工程专业很“霸气”,不管985还是“二本”,毕业几乎都高薪就业...
- 魔方世界服务器文件,魔方世界服务器指令 | 手游网游页游攻略大全
热门文章
- ios加载本地游戏html,使用WKWebView iOS加载本地HTML / Javascript
- libevent源码学习-----事件驱动流程分析
- 防火墙(7)——禁止具体协议
- iOS 真机调试包集合 包含 iOS 12.4 不断更新
- 汇编---输出AX的地址值
- ubuntu下txt文件编码转换、查询(gbk/ISO-8859-utf-8)
- HDU Problem - 4289 Control(最大流)
- CodeForces - 803C Maximal GCD(贪心 + 枚举)
- tail | grep引起的内存升高【对比三天数据】
- warning: ISO C++ forbids converting a string constant to ‘char*‘ [-Wwrite-strings]