公司自建网站备案,广州seo推广优化,网站接入银联支付怎么做,wordpress免费版这里写目录标题 位运算#xff08;均是拷贝运算#xff0c;不会影响原数据#xff0c;这点要注意#xff09;、|、^位运算特性细节知识补充对于n-1的理解异或来实现数字交换找到只出现一次的数据#xff0c;其余数据出现偶数次 、二进制中相邻的位的… 这里写目录标题 位运算均是拷贝运算不会影响原数据这点要注意、|、^位运算特性细节知识补充对于n-1的理解异或来实现数字交换找到只出现一次的数据其余数据出现偶数次 、二进制中相邻的位的特点 一级目录二级目录二级目录二级目录 一级目录二级目录二级目录二级目录 一级目录二级目录二级目录二级目录 一级目录二级目录二级目录二级目录 位运算均是拷贝运算不会影响原数据这点要注意
、|、^
位运算特性细节 首先我们尝试不使用递归来解决这道题他让我们判断是一个数是否为2的次幂。 尝试往位运算方面靠位运算是通过二进制来解决问题的而二进制就是2的次幂的表示且二进制从低位向高位依次是2的012345…次方所以我们可以知道二进制表示为10000的数即第一位是1后面全是0的数是2的次幂数 所以初步的认知已经建立了。之后寻找位运算的特性如果一个数是1000的话那么0111 1 就是 1000而1000与0111做位与运算可以得到0000所以可以通过该性质找到10000特点的数
注意点1小于等于0的数可以直接排除 注意点2进行位运算时要在做完位运算之后加一层括号因为位运算的优先级低于
知识补充 2的偶数次幂mod3等于1例如4、16等mod3 等于 1 而2的奇数次幂就是2的偶数次幂再乘2此时如8、32mod3等于2 所以在求4的次幂时因为2的偶次幂一定是4的次幂所以我们在找到2的次幂数的基础上再找到那些是2的偶次幂的数那些数mod31
对于n-1的理解 对于一个二进制 n 10000010000101010n - 1 10000010000101000n - 1会将一个数的二进制表达最右边的1变为0而其他不变利用该特点可以得到1的个数
或者使用lowbit见算法一栏“数据结构与算法”lowbit的时间复杂度更低
异或来实现数字交换 首先a a ^ b此后我们可以将一个a看成是变化之后的a而如果a^b则是原数据a、b b a ^ b此时a是变化之后的a将其拆开a ^ b ^ b此时a是变化之前的a所以就等于a ^ 0最终等于原来的a 而到此时a除了在第一行做出了改变其他地方均无改变所以还是第一行的结论可以将一个a看成是变化之后的a而如果a^b则是原数据a、b 所以a a ^ ba是第一行代码执行后变化的ab是原来的a所以将a拆开得到原来的a 和 b并且将b换成原来的aa ^ b ^ a再使用交换律得到a ^ a ^ b最后等于原来的b 找到只出现一次的数据其余数据出现偶数次 首先定义res 0 之后将res与数组中的每个数进行异或运算 用到的知识点 1、0^a a 2、b^b 0 、
二进制中相邻的位的特点 判断相邻位数是否交替为0、1
也就是相邻的位数上不能是相同的即不能是00或者11 而00对应于十进制是011对应于十进制是3
所以如果 n3 3则表示当前n的右边两位是11 如果n3 0,则表示当前n的右边是00注意此处还是3即0011结果为00。逻辑上他还有个等价式是0000结果为11也就是n0 3但是如果0的话可能转为二进制就变成一位0而3的话铁定在二进制是两位所以0会导致某些数据点报错
每次判断完之后将n1右移一位并覆盖到n注意每次右移一位如果右移两位可能会出现0110这样的数据会出错
注意点1运算一次进行多位二进制判断时尽量避免0尽可能找其等效式
一级目录
二级目录
二级目录
二级目录
一级目录
二级目录
二级目录
二级目录
一级目录
二级目录
二级目录
二级目录
一级目录
二级目录
二级目录
二级目录