面试书上一些题目的整理:O(n)复杂度排序年龄 & 青蛙跳台阶
可以按照年龄的个数,设置99个桶,然后桶内处理。
青蛙跳台阶,每次1阶或者2阶,就是fib数
如果每次1到n阶,那么归纳法可得,是2^(n-1)
另外1*2 覆盖 2*n个矩阵的问题,仍然是Fib数。
求出一个数字里面有多少个1。一般的方法是用1来移位并且比较。但是也有巧妙的方法是,每次-1然后跟原来的数字&,能够消去一个1.
这种方法,很多题目都可以用。
有两个数,要改变多少位,可以让两个数字一样。
解法:先求出异或,然后统计这个异或结果里面的1就可以了。
浮点数比较
用"=="来比较两个double应该相等的类型,返回真值完全是不确定的。计算机对浮点数的进行计算的原理是只保证必要精度内正确即可。
求power,一般是这样:
要判断指数是不是负数,底数是不是0
然后指数偶数,就两两想乘;奇数,就两两想乘,再乘一个。
a^x = a^x/2 * a^x/2 (* a)
合并两个有序链表。这个可以用递归的去做,也可以迭代的去做。
看到第151页。