面试题1:使用Python实现单例模式
方法一 使用__new__实现单例模式
方法二 使用装饰器实现单例模式
方法三 使用模块实现单例模式
可以使用模块创建单例模式,然后在其他模块中导入该单例,这个需要所有人遵守导入规则,不然就没法实现单例了
面试题2:二维数组中的查找
题目:二维数组中,每行从左到右递增,每列从上到下递增,给出一个数,判断它是否在数组中
思路:从左下角或者右上角开始比较
面试题3:替换空格
题目:把字符串中的空格替换成'20%'
方法1:直接使用Python字符串的内置函数
方法2: 使用正则表达式
面试题4 从尾到头打印单链表
方法1:使用栈,可以使用列表模拟
方法2:直接递归
面试题5 重建二叉树
要求:用前序和中序遍历结果构建二叉树,遍历结果中不包含重复值
思路:前序的第一个元素是根结点的值,在中序中找到该值,中序中该值的左边的元素是根结点的左子树,右边是右子树,然后递归的处理左边和右边
提示:二叉树结点,以及对二叉树的各种操作,测试代码见six.py
面试题6 用两个栈实现队列
要求:用两个栈实现队列,分别实现入队和出队操作 思路:一个栈负责入队,另一个负责出队,出栈为空则从入栈中导入到出栈中
面试题7 旋转数组的最小数字
要求:把递增数组的前面部分数字移到队尾,求数组中的最小值,例如[3,4,5,6,1,2]
思路:使用二分法,但要考虑[1, 0, 0, 1]这种数据,只能顺序查找
面试题8 斐波那契数列
思路:用生成器
面试题9 二进制中1的个数
要求:求一个整数的二进制表示中,1的个数
思路:二进制表示中,最后的那个1被减去后,低位都变为0,高位不变,按位与就可以去掉这个1