一日一技:使用异或寻找孤独的数
时间:2022-06-17
本文章向大家介绍一日一技:使用异或寻找孤独的数,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
在二进制中,异或(XOR)具有以下性质:
- 相同的数,异或以后为0,不同的数,异或以后为1.
- 0与任何数相异或,结果都是原数本身
例如:
>>> 0 ^ 0
0
>>> 0 ^ 1
1
>>> 0 ^ 9
9
>>> 7 ^ 7
0
- 异或操作满足交换率
>>> 7 ^ 6 ^ 7
6
>>> (7 ^ 7) ^ 6
6
使用这个性质,可以完成下面这个算法题:
有一个无序的列表,里面有2n + 1个数。其中有n个各出现了2次,另有唯一一个数只出现了1次。使用时间复杂度为O(1),空间复杂度为O(1)的算法找出这个只出现1次的数。
例如这个列表为: [1,1,3,5,2,6,5,3,2]
,其中的 1
、 3
、 2
、 5
都出现了2次,而 6
只出现了1次。需要找出6。
使用异或算法非常简单:
>>> a = [1, 1, 3, 5, 2, 6, 5, 3, 2]
>>> s = 0
>>> for n in a:
... s = s ^ n
>>> s
6
- Android 使用dagger2进行依赖注入(基础篇)
- Html小知识总结
- 如何训练一个性能不错的深度神经网络
- 使用AndroidStudio编译NDK的方法及错误解决方案
- 计算机视觉 | Python OpenCV 3 使用背景减除进行目标检测
- linux(centos)搭建SVN服务器
- 简单的Hibernate入门简介
- 思梦PHP-阿里大鱼手机验证码
- IIS 安装 pydio
- 面试机器学习、大数据岗位时遇到的各种问题
- ThinkPHP连续签到小案例
- Windows环境配置Apache+Mysql+PHP
- 如何使用Retrofit获取服务器返回来的JSON字符串
- Python相对、绝对导入浅析
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Redis基础数据类型(string、hash、list)
- 【go】编程之法:01背包问题及滚动数组优化
- 【go】剑指offer:求一个数的整数次方
- 《编程珠玑》字符串包含
- redis基本数据类型(集合、HyperLogLog、地理位置)
- 【go】剑指offer:不同程序员遇到相同的题
- Spring全家桶之SpringSecurity
- Go实现字符串全排列字典序排列详解
- Go实现字符串全排列详解递归
- springboot整合RSA进行sign签名校验
- Go寻找最长回文字符串——中心扩展法
- Spring高级技术应用——百战商城实现(上)
- 基于Springboot+jpa+thymeleaf+rabbit+SpringBoot mail 的简单项目
- 【go】剑指offer: 删除链表结点O(1)时间复杂度
- Go快速查找有序二维数组的数字