算法很美第一章全部
判断x是奇偶数:
x&1==1?(奇数) : (偶数)
题目1:
思路:
首先我们异或这个数组中的所有元素,在写一个for异或1-1000。
为什么这样子呢??因为x^x=0。我们异或了一次1-1000和一个数组,此时我们总共异或了两次1-1000和一个x,所以我们可以得到x。
题目二
思路:
此题和上题类似,我们只需要异或一次数组即可,出现两次的自己会抵消,最后就可以得到只出现过一次的。
题目三:
思路:
我的两种解法(和老师的不同):
第一种:
将数字转化为二进制的字符串,通过charAt查找1的个数。
第二种:
计算x&1,如果结果为1,count+1.。每次计算完都将x/2(一直到x==0 )
题目四:
思路:
用一条语句,如果之前没听的话,还真想不出来。
if(((a-1)&a)==0)
这句是什么意思呢?首先如果一个数字是2的整数次方,那么在二进制转态下就只有一个1,a-1之后原本位置上的1就变成了0,之后的位置变成了1,此时再与本身进行&运算结果为0。
题目五:
思路:
这题能写,但是没老师的牛逼。
知识点:
0xaaaaaaaa为1010101010(32位)
0x55555555为0101010101(32位)
将x与这两个进行&运算,得到a,b,(a>>1)^(b<<1)就是答案
题目六:
思路:
首先我们要了解小数点后的数字如何转为二进制。例如x=0.3.一开始二进制为“0.”,我们将0.3*2=0.6,0.6<1,所以二进制为“0.0”,再将0.6 *2=1.2,1.2大于1,所以二进制为“0.01”,将1.2-1=0.2,以此类推。
直到x=0结束。
题目七:
思路:
这里老师用到了,k个k进制数做不进位加法,得到的结果为。
我的思路是,先sort,然后比较第i个是否与i+1相同,相同的话i=i+k,不同的话就找到了