算法很美第一章全部

判断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,不同的话就找到了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值