当前位置: 首页 > news >正文

leetcode算法-位运算

位运算,直接在二进制上进行的按位操作,位运算的种类如下:

1.按位异或^:异或的含义是操作的两位不同,则结果为1,相同则结果为0,所以两个相同的数异或,结果应该是0,3^3的结果是0,3^4的结果是7(011^100=111),可以看出来异或就是无进位加法啊。异或运算还满足交换律和结合律。a^b^a=b这个其实是因为a^a=0,0^b=b

2.按位与&,操作的两位必须都为1时,结果才为1,1&1=1,1&0=0&1=0&0=0。可以看出来,两个相同的数&运算,得到的还是它自己。两个不同的数计算,得到的是他们相同的位,即取交集

3.按位或|,操作的两位数任意一个为1时,结果就为1,1|1=1|0=0|1=1,0|0=0。可以看出来,两个相同的数|运算,得到的还是它自己,相同不同的数据计算,得到的是他们的并集。

4.按位取反~,这个运算符只有一个操作数,作用就是翻转二进制,如果是有符号的,正负也会随着对调。

5.算数左移<<和算数右移>>,A<<b,将A向左移动b位,空出来的部分补0,右移也是相同的。所以箭头方向就是移动的方向。算数右移可以用来取最小的一位 A&1,A>>1。

典型题目:

461--求汉明距离(二进制不同的位数),先进行异或运算,然后不断的算数右移取最后一位,计算最后一位是1的次数。

190--翻转二进制,把一个10进制的整数按位翻转,按位取反是不行的,因为符号位也会被翻转?

A&1=0 则B<<1 b&1,A&1=1则B<<1,因为算数左移多出来的都是0,所以直接B<<1,B+=A&1即可。

136题,求一个数组内只出现一次的数字,这个解法太巧妙了。x^0=x,x^x=0,而且异或操作是有结合律的,所以异或的顺序并不重要。把所有的数字异或完了,最后还是会剩下单独出现的那一个。

http://www.lryc.cn/news/299407.html

相关文章:

  • 「MySQL」约束
  • C语言:详解操作符(下)
  • Vue3.0(六):VueX 4.x详解
  • 突破编程_C++_面试(基础知识(13))
  • 掌握C语言文件操作:从入门到精通的完整指南!
  • JavaEE作业-实验二
  • 2月8号作业
  • 08:K8S资源对象管理|服务与负载均衡|Ingress
  • HarmonyOS 横屏调试与真机横屏运行
  • Javaweb基础-tomcat,servlet
  • HCIA-HarmonyOS设备开发认证V2.0-3.2.轻量系统内核基础-中断管理
  • 【开源】JAVA+Vue+SpringBoot实现就医保险管理系统
  • Stable Diffusion 模型下载:DreamShaper XL(梦想塑造者 XL)
  • 【机器学习】数据清洗之处理异常点
  • JavaScript学习之旅10------掌握jQuery:实用应用案例深度解析
  • 017_逆向工程搭建和使用
  • 位运算+leetcode(1)
  • 如何在 JavaScript 中比较两个日期 – 技术、方法和最佳实践
  • 【More Effective C++】条款17:考虑使用lazy evaluation
  • 深入探索Pandas读写XML文件的完整指南与实战read_xml、to_xml【第79篇—读写XML文件】
  • 如何在我们的模型中使用Beam search
  • PKI - 借助Nginx 实现Https 服务端单向认证、服务端客户端双向认证
  • WebSocket原理详解
  • 在面试中如何回复擅长vue还是react
  • 使用Vue.js输出一个hello world
  • 15 ABC基于状态机的按键消抖原理与状态转移图
  • λ-矩阵的多项式展开
  • 如何在PDF 文件中删除页面?
  • 蓝桥杯官网填空题(质数拆分)
  • 【数据结构】二叉树的顺序结构及链式结构