位运算相关的算法题

剑指offer56:数组中只出现一次的两个数字

题目链接:

数组中只出现一次的两个数字_牛客题霸_牛客网

本题使用的是异或运算
异或运算的特点:

1.a^a = 0

2.0^a = a

*本题的技巧在于,第一次将数组遍历异或后得到两个目标数的异或结果

* 找到结果中为1的那一位(按位和1相与运算),即两个目标数存在区别的位

* 利用这个区分点,可以将数组划分为两部分

* 对两部分分别异或,就可以得到两个目标数结果

剑指offer65不用加减乘除做加法

题目链接:

不用加减乘除做加法_牛客题霸_牛客网

step 1:两数进行与运算可以产生进位的信息

step 2:运算后执行左移1位就是每轮需要进位的方案

step 3:两数进行异或运算可以产生非进位的加和结果

step 4:将移位后的进位结果与非进位结果继续重复 step 1 - step 3 的步骤,直到不再产生进位为止

举例说明:

5 + 7 = 101 + 111 = 1100

step1:101 & 111 = 101

step2:101 << 1 = 1010

step3:101 ^ 111 = 010

重复上述操作

1010 & 010 = 0010

0010 << 1 = 00100

1010 ^ 010 = 1000

00100 & 1000 = 0000

0000 << 1 = 00000

00100 ^ 1000 = 1100

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容