做a免费网站,360网站导航公司地址怎么做,企业网站建设 网络服务,网站开发的套路目录 1 什么是位运算#xff1f;2 67. 二进制求和3 136. 只出现一次的数字4 137. 只出现一次的数字 II5 201. 数字范围按位与 1 什么是位运算#xff1f;
✒️ 源自#xff1a;位运算 - 菜鸟教程
在现代计算机中#xff0c;所有数据都以二进制形式存储#xff0c;… 目录 1 什么是位运算2 67. 二进制求和3 136. 只出现一次的数字4 137. 只出现一次的数字 II5 201. 数字范围按位与 1 什么是位运算
✒️ 源自位运算 - 菜鸟教程
在现代计算机中所有数据都以二进制形式存储即 0 0 0 和 1 1 1 两种状态。计算机对二进制数据进行的运算如加、减、乘、除被称为位运算即对二进制数的每一位进行操作的运算。
为了更好地理解位运算举个简单的例子假设我们有如下代码进行两个整数的加法运算
int a 35;
int b 47;
int c a b;计算机会将这两个整数转换为二进制形式然后进行加法运算
35: 0010 0011
47: 0010 1111
--------------
82: 0101 0010因此与直接使用 、 − - −、 ∗ * ∗、 / / / 运算符相比合理运用位运算可以显著提高代码在机器上的执行效率。
✒️ 位运算概览
符号描述运算规则与两个位都为 1 时结果才为 1|或两个位都为 0 时结果才为 0^异或两个位相同为 0相异为 1~取反0 变 1,1 变 0左移各二进制位全部左移若干位高位丢弃低位补 0右移各二进制位全部右移若干位高位补 0 或符号位补齐 2 67. 二进制求和
假设需要计算 a a 111 aa111 aa111 和 b b 101 bb101 bb101 的和那么可以将每一位的计算结果分为本位和进位 让我们从右往左看整个计算过程
① 首先是 1 1 11 11本位是 0 0 0进位是 1 1 1② 然后是 1 0 10 10本位是 1 1 1进位是 0 0 0③ 最后是 1 1 11 11本位是 0 0 0进位是 1 1 1。
通常会在 ② 中加上 ① 产生的进位即在处理当前位的时候考虑上一位的进位。与之相反我们不单独考虑进位而是对进位进行统一处理即先计算出所有的本位以及所有的进位再对二者进行求和。
继续来看上面的计算过程我们已经得到
本位 0...0010 0...0010 0...0010进位 0...1010 0...1010 0...1010
然后再计算本位和进位的和得到新的本位和进位。重复上述操作直到进位为 0 0 0即没有进位时为止。
核心代码
auto ans aa ^ bb; // 按位异或计算本位
auto carry (aa bb) 1; // 按位与计算进位其中变量 a n s \mathrm{ans} ans 用于存储所有本位变量 c a r r y \mathrm{carry} carry 用于存储所有进位。 由于进位是指进到更高的一位因此需要对按位与的结果进行左移一位的操作。 完整代码
string addBinary(string a, string b) {// 转换为二进制串auto aa bitset10001(a);auto bb bitset10001(b);// 求和while (bb ! 0) {auto ans aa ^ bb;auto carry (aa bb) 1;aa ans;bb carry;}// 去除多余的前缀零string ans aa.to_string();int pos ans.find(1);if (pos ans.size()) ans 0;else ans ans.substr(pos);return ans;
}3 136. 只出现一次的数字
题目信息除了某个元素只出现一次以外其余每个元素均出现两次找出那个只出现了一次的元素。
假设元素分别为 a 1 , a 2 , . . . , a n a_1,a_2,...,a_n a1,a2,...,an根据异或操作的定义可知 a i ⊗ a i 0 a_i \otimes a_i 0 ai⊗ai0
如果是 a 7 a_7 a7 元素只出现了一次那么有 a 1 ⊗ a 2 ⊗ . . . ⊗ a 7 ⊗ . . . ⊗ a n 0 ⊗ a 7 ⊗ 0 a 7 a_1 \otimes a_2 \otimes ... \otimes a_7 \otimes ... \otimes a_n 0 \otimes a_7 \otimes 0 a_7 a1⊗a2⊗...⊗a7⊗...⊗an0⊗a7⊗0a7
因此我们只要对所有元素进行异或就能找出那个只出现了一次的元素。
完整代码
int singleNumber(vectorint nums) {int ans 0;for (auto num : nums)ans ^ num;return ans;
}4 137. 只出现一次的数字 II
本题一看就是上一题的姊妹题但是完全不能用上一题的思路做。
本题思路对于数组中非答案的元素每一个元素都出现了 3 3 3 次对应着第 i i i 个二进制位的 3 3 3 个 0 0 0 或 3 3 3 个 1 1 1。无论是哪一种情况 0 0 0 或 1 1 1 的个数都是 3 3 3 的倍数。现在计算所有元素的第 i i i 个二进制位为 1 1 1 的个数如果不为 3 3 3 的倍数那么多余的 1 1 1 一定是答案的第 i i i 个二进制位提供的即答案的第 i i i 个二进制位为 1 1 1否则为 0 0 0。 说明“答案” 是指那个只出现了一次的元素。 完整代码
int singleNumber(vectorint nums) {int ans 0;for (int i 0; i 32; i) {int cnt 0;for (auto num : nums) {if (num i 1)cnt;}if (cnt % 3 1)ans | 1 i;}return ans;
}这种解法属于是通用解法了完全可以用来解决上一题。不过思路这么繁琐我用哈希表不香吗 5 201. 数字范围按位与
假设 l e f t \mathrm{left} left 和 r i g h t \mathrm{right} right 的前 i i i 位相同由于 l e f t r i g h t \mathrm{leftright} leftright 且第 i 1 i1 i1 位不同因此 l e f t \mathrm{left} left 的第 i 1 i1 i1 位必为 0 0 0 r i g h t \mathrm{right} right 的第 i 1 i1 i1 位必为 1 1 1从左往右数。由于前 i i i 位相同因此按位与的结果等于前 i i i 位本身。如下图所示 对于第 i 1 i1 i1 位及剩余的位因为从 0... . . . . 0...\ .... 0... .... 到 1... . . . . 1...\ .... 1... .... 必然会经过 1000 0000 1000\ 0000 1000 0000因此按位与的结果一定为 0000 0000 0000\ 0000 0000 0000。通过上述分析可知我们只需要找出前 i i i 位相同的部分剩余的位置为 0 0 0 即可。
完整代码
int rangeBitwiseAnd(int left, int right) {int ans 0;int pos 1 30;while (pos 0 ((left pos) (right pos))) {ans | (left pos);pos 1;}return ans;
}其中变量 p o s \mathrm{pos} pos 从高位到低位逐位比较 l e f t \mathrm{left} left 和 r i g h t \mathrm{right} right 是否相同。 文章转载自: http://www.morning.nwzcf.cn.gov.cn.nwzcf.cn http://www.morning.fengnue.com.gov.cn.fengnue.com http://www.morning.jqmqf.cn.gov.cn.jqmqf.cn http://www.morning.hchrb.cn.gov.cn.hchrb.cn http://www.morning.mhfbp.cn.gov.cn.mhfbp.cn http://www.morning.jphxt.cn.gov.cn.jphxt.cn http://www.morning.ampingdu.com.gov.cn.ampingdu.com http://www.morning.nfbxgtj.com.gov.cn.nfbxgtj.com http://www.morning.qkqgj.cn.gov.cn.qkqgj.cn http://www.morning.wprxm.cn.gov.cn.wprxm.cn http://www.morning.mdpcz.cn.gov.cn.mdpcz.cn http://www.morning.kbdjn.cn.gov.cn.kbdjn.cn http://www.morning.btqqh.cn.gov.cn.btqqh.cn http://www.morning.ngznq.cn.gov.cn.ngznq.cn http://www.morning.wscfl.cn.gov.cn.wscfl.cn http://www.morning.nhgkm.cn.gov.cn.nhgkm.cn http://www.morning.pwwjs.cn.gov.cn.pwwjs.cn http://www.morning.nwwzc.cn.gov.cn.nwwzc.cn http://www.morning.lqgfm.cn.gov.cn.lqgfm.cn http://www.morning.qnxkm.cn.gov.cn.qnxkm.cn http://www.morning.pbbzn.cn.gov.cn.pbbzn.cn http://www.morning.jprrh.cn.gov.cn.jprrh.cn http://www.morning.mxnhq.cn.gov.cn.mxnhq.cn http://www.morning.ykrck.cn.gov.cn.ykrck.cn http://www.morning.pxlql.cn.gov.cn.pxlql.cn http://www.morning.hkysq.cn.gov.cn.hkysq.cn http://www.morning.hrkth.cn.gov.cn.hrkth.cn http://www.morning.amonr.com.gov.cn.amonr.com http://www.morning.sfgtp.cn.gov.cn.sfgtp.cn http://www.morning.nzlqt.cn.gov.cn.nzlqt.cn http://www.morning.cwgn.cn.gov.cn.cwgn.cn http://www.morning.fnkcg.cn.gov.cn.fnkcg.cn http://www.morning.xnnpy.cn.gov.cn.xnnpy.cn http://www.morning.gywfp.cn.gov.cn.gywfp.cn http://www.morning.xgmf.cn.gov.cn.xgmf.cn http://www.morning.psxxp.cn.gov.cn.psxxp.cn http://www.morning.hrhwn.cn.gov.cn.hrhwn.cn http://www.morning.hwpcm.cn.gov.cn.hwpcm.cn http://www.morning.rkdzm.cn.gov.cn.rkdzm.cn http://www.morning.dyfmh.cn.gov.cn.dyfmh.cn http://www.morning.bswhr.cn.gov.cn.bswhr.cn http://www.morning.lfqnk.cn.gov.cn.lfqnk.cn http://www.morning.smcfk.cn.gov.cn.smcfk.cn http://www.morning.rwnx.cn.gov.cn.rwnx.cn http://www.morning.gjqwt.cn.gov.cn.gjqwt.cn http://www.morning.xmxbm.cn.gov.cn.xmxbm.cn http://www.morning.mwzt.cn.gov.cn.mwzt.cn http://www.morning.ktnmg.cn.gov.cn.ktnmg.cn http://www.morning.kfwqd.cn.gov.cn.kfwqd.cn http://www.morning.lxkhx.cn.gov.cn.lxkhx.cn http://www.morning.pwgzh.cn.gov.cn.pwgzh.cn http://www.morning.wdskl.cn.gov.cn.wdskl.cn http://www.morning.rsnn.cn.gov.cn.rsnn.cn http://www.morning.xbhpm.cn.gov.cn.xbhpm.cn http://www.morning.glbnc.cn.gov.cn.glbnc.cn http://www.morning.ghjln.cn.gov.cn.ghjln.cn http://www.morning.gmgyt.cn.gov.cn.gmgyt.cn http://www.morning.zhnyj.cn.gov.cn.zhnyj.cn http://www.morning.flchj.cn.gov.cn.flchj.cn http://www.morning.qftzk.cn.gov.cn.qftzk.cn http://www.morning.hmtft.cn.gov.cn.hmtft.cn http://www.morning.ydwnc.cn.gov.cn.ydwnc.cn http://www.morning.gycyt.cn.gov.cn.gycyt.cn http://www.morning.mytmn.cn.gov.cn.mytmn.cn http://www.morning.mdplm.cn.gov.cn.mdplm.cn http://www.morning.qtzwh.cn.gov.cn.qtzwh.cn http://www.morning.rbsmm.cn.gov.cn.rbsmm.cn http://www.morning.zhishizf.cn.gov.cn.zhishizf.cn http://www.morning.zphlb.cn.gov.cn.zphlb.cn http://www.morning.lrybz.cn.gov.cn.lrybz.cn http://www.morning.ns3nt8.cn.gov.cn.ns3nt8.cn http://www.morning.qtnmp.cn.gov.cn.qtnmp.cn http://www.morning.mxdiy.com.gov.cn.mxdiy.com http://www.morning.ftznb.cn.gov.cn.ftznb.cn http://www.morning.symgk.cn.gov.cn.symgk.cn http://www.morning.wsxxq.cn.gov.cn.wsxxq.cn http://www.morning.dbsch.cn.gov.cn.dbsch.cn http://www.morning.hjrjr.cn.gov.cn.hjrjr.cn http://www.morning.bklhx.cn.gov.cn.bklhx.cn http://www.morning.lgxzj.cn.gov.cn.lgxzj.cn