《编程之美》——读书笔记

最近花了几天时间把《编程之美》这本书好好读了一遍,感觉收获还是挺大的。
于是决定做个笔记,算是简单的摘录一些书中的精彩思想,也算重新回顾思考下
 

1.5 快速找出机器故障
问题描述:
有很多的ID(可能位数很大),其中只有一个ID出现的次数小于2,其他正常ID出现的次数都等于2,求这个次数为1的ID
精彩解法:
将所有的数从头到尾异或一遍,这样得出来的最终结果就是所求的答案。
拓展:
假如有两个ID出现次数为1,其他都为2,怎么求出这两个ID呢?
把那两个ID命名为A,B
这时把所有的数抑或一遍后,得到的值其实是A^B,
因为A,B是不同的,所以A^B的值的二进制中至少有一位是1。显然,A和B中有且仅有一个数的相同位上也为1
这样把所有ID分成两类,一类在这类上为1,另一类为0。然后再把这两类分别抑或即可分别得到答案


1.9 高效的安排见面会
拓展问题1:

已知n个区间,求这n个区间,在坐标轴上哪个区间上覆盖次数最多,求这个次数
书上的解法就不说了,我的解法是用线段树,区间维护sum值和max,对每个已给区间加1,然后返回整段区间的max即可
(如果区间端点不是整数,简单处理方法是把区间端点乘以10的k次方,使其成为整数)

 

2.1求二进制中1的个数
问题1:
如何判断一个数是不是2的整数次幂
精彩解法:判断 (n &= n-1) ==  0 ? (n > 0)
eg:010000  & 001111  ==  0 ,所以是的

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值