1.常见的位运算

按位与&:(1&1=1,1&0=0,0&1=0,0&0=0);
按位或 | : (1 | 1=1,1 | 0=1,0 | 1=1,0 | 0=0);
按位非 ~: ( ~1=0, ~0=1);
按位异或 ^ : (1^1=0 ,1^0=1, 0^1=1, 0^0=0);
异或运算有以下三个性质。
任何数和 0做异或运算,结果仍然是原来的数,即 a⊕0=aa \oplus 0=aa⊕0=a。
任何数和其自身做异或运算,结果是 0,即 a⊕a=0a \oplus a=0a⊕a=0。
异或运算满足交换律和结合律,即 a⊕b⊕a=b⊕a⊕a=ba \oplus b \oplus a=b \oplus a \oplus a=ba⊕b⊕a=b⊕a⊕a=b ⊕(a⊕a)=b⊕0=b\oplus (a \oplus a)=b \oplus0=b⊕(a⊕a)=b⊕0=b。
简单来说,如果参与异或的两个数相同,则它们异或的结果便为0,而0与任何数的异或就是该数本身,利用该性质,我们可以极大地简化我们的程序。
接下来请具体看下面两个LeetCode题目。

2.找不同

给定两个字符串 s 和 t ,它们只包含小写字母。
字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母。
请找出在 t 中被添加的字母。
示例一:

示例二:

1.思路分析

我们利用异或运算,将两个字符串s和t的所有字符进行异或运算,最终得到的就是那最后一个不同的字符的ASCll编码,注意,最后返回的时候需要强转为char类型。具体代码如下所示:

class Solution {public char findTheDifference(String s, String t) {int sum=0;for(int i=0;i<s.length();i++){sum^=s.charAt(i);}for(int j=0;j<t.length();j++){sum^=t.charAt(j);}return (char)sum;}
}

2.结果展示

3.只出现一次的数字

给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
说明:
你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?
示例一:

示例二:

1.思路分析

同样的,该题与上一题找不同类似,同样是找到在数组中无法配对的数字,即如果将数组中的所有元素进行异或运算,最后的结果就是那个只出现一次的数字。具体代码如下所示:

class Solution {public int singleNumber(int[] nums) {int result=0;for(int num:nums){result=result^num;}return result;}
}

2.结果展示


以上两个题目是进行异或运算的典型例题,可以极大地简化我们的程序。所以,我们在日常的编程中要熟练掌握并运用位运算。

LeetCode刷题:位运算(找不同 和 只出现一次的数字)相关推荐

  1. C#LeetCode刷题-位运算

    位运算篇 # 题名 刷题 通过率 难度 78 子集 67.2% 中等 136 只出现一次的数字 C#LeetCode刷题之#136-只出现一次的数字(Single Number) 53.5% 简单 1 ...

  2. Leetcode刷题06-位运算

    位运算 基础知识 原码.反码和补码 二进制有三种不同的表示形式:原码.反码和补码,计算机内部使用补码来表示 原码:就是其二进制表示,(其中第一位为符号位) 反码:正数的反码就是原码,负数的反码是符号位 ...

  3. C#LeetCode刷题之#744-寻找比目标字母大的最小字母(Find Smallest Letter Greater Than Target)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/4001 访问. 给定一个只包含小写字母的有序数组letters 和 ...

  4. C#LeetCode刷题之#724-寻找数组的中心索引( Find Pivot Index)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3742 访问. 给定一个整数类型的数组 nums,请编写一个能够返 ...

  5. C#LeetCode刷题-二分查找​​​​​​​

    二分查找篇 # 题名 刷题 通过率 难度 4 两个排序数组的中位数 C#LeetCode刷题之#4-两个排序数组的中位数(Median of Two Sorted Arrays)-该题未达最优解 30 ...

  6. C#LeetCode刷题-数组

    数组篇 # 题名 刷题 通过率 难度 1 两数之和 C#LeetCode刷题之#1-两数之和(Two Sum) 43.1% 简单 4 两个排序数组的中位数 C#LeetCode刷题之#4-两个排序数组 ...

  7. LeetCode刷题宝典 V1.0 PDF下载

    前段时间,在知识星球立了一个Flag,现在 Flag 的进度为 100%,很是开心. 为了大家学习的方便,所以整理了这份150多页的小册子.可以作为学习数据结构与算法或备考计算机类研究生的参考资料,希 ...

  8. Leetcode刷题——剑指offer_1

    Leetcode刷题--剑指offer_1 剑指offer_03 数组中重复的数字 剑指offer_04 二维数组中元素的查找 剑指offer_05 替换空格 剑指offer_06 从尾到头打印链表 ...

  9. 第一届LeetCode刷题打卡赢现金活动开始啦,助力每一位想拿大厂offer的小伙伴!

    大家好,我是路飞!第一届leetcode(剑指Offer.LeetCode Top100)刷题打卡活动即将开始啦 (助力大厂Offer收割机)~ 活动形式: LeetCode刷题在自己的CSDN博客上 ...

  10. LeetCode刷题指南

    CSDN话题挑战赛第1期 活动详情地址:https://marketing.csdn.net/p/bb5081d88a77db8d6ef45bb7b6ef3d7f 参赛话题:Leetcode刷题指南 ...

最新文章

  1. 了解Java中的检查与未检查异常
  2. print python 如何加锁_Python 进阶(一):多线程
  3. 原型继承与属性拷贝的混合应用
  4. python中matplotlib关于直方图AttributeError: ‘Rectangle‘ object has no property ‘normed‘的解决方法
  5. String, StringBuilder 与StringBuffer的区别与联系
  6. 命令(CMD)终端的清屏(清除/清空)命令/快捷键
  7. HTML页面代码移动端和pc兼容,pc端网站如何实现移动端适配?
  8. 操作系统文件分配策略_操作系统中的文件分配方法
  9. 在d3中使用2D.js获取图形间的交点
  10. warpctc error
  11. 页面查询条件选框被隐藏的问题
  12. STM32 BOOT模式设置
  13. mysql条件触发器实例_mysql 触发器实例
  14. 35岁高以翔过劳猝死:人生无常,求各位项目经理少加点班吧
  15. 国外问卷调查怎么做?谁都能做吗?
  16. spring加载流程之AnnotatedBeanDefinitionReader
  17. 按键精灵制作自用游戏脚本所需的简单操作
  18. 在线工具:将图片透明化
  19. web平台使用threejs实现三维视频融合的思路
  20. 来点基础的东西,关于浮点数的大小端转换以及浮点数的格式解析

热门文章

  1. 蓝牙歌曲信息传递方法
  2. AutoHotKey脚本:用热键(hotkey)和热字符串(hotstring)简化war3秘籍输入
  3. SUSE系统添加开机自启项
  4. Pyrosim实例教程:隧道火灾案例
  5. [转载] 翻译 西川善司著针对3D游戏爱好者的”METAL GEAR SOLID 4”图形讲座(上)
  6. PHP编程----for循环的妙用
  7. PHP中的for循环
  8. html5 剪切板,【Web前端问题】当你复制一个网页的时候,你的剪切板里是什么呢?...
  9. 【毕设教学】颜色传感器TCS3200使用
  10. 随机微分方程学习笔记02 Doob鞅不等式