面试手撕算法汇总(持续更新)
所有题目都是从面经中提取而来,持续更新。
本人也是菜鸟一枚,帖子也会相应的发布自己对于题目的解法和看法,但是可能想得不够,也希望大家能够一起讨论,一起进步。
1.数组中找出所有重复数字?空间复杂度为O(1),时间复杂度最小?
实在没有O(1)的方法,只能实现O(n),欢迎讨论。方案1:创建n个数字的数组,循环相加,将大于1的数字打印出来方案2:map,先contains判断,存在就打印,不存在就put
2.一个二维数组只含0,1;将1围城的矩阵中所有的0的数字转换成1?
3.求链表中点?
4. 手写常用设计模式(单例)
饿汉懒汉的区别、好处、缺点都要会这里可能会引申出单例的条件,详见:http://www.runoob.com/design-pattern/singleton-pattern.html
5.手写生产者消费者模式?
不解释,不理解的,先背住再好好理解
6.100个0到100之间的整数排序
7.two sum问题到k sum问题
8.旋转数组二分查找
9.算 a + b, 不能用加号或减号
位运算,大家百度一下就可以了
10. 数组中超过一半的数
11. 大文件100亿个数字,求前m大的数
12.两个有序数组,求第k个数
13.最大连续子数组和
基础题,贪心。
14.二维数组中,每个元素有个数字,求某一个点到任意一点的sum和(只能向右或者向下) dp记录到每个点的sum
15.手写快速排序算法,并解释过程。
不会的,直接背吧......
16.重建二叉树
17.二分查找
18.从字符串中“aecbcda”找出不重复的字符组成的顺序子串“aecbd”,用最优的时空复杂度。
19.判断一个链表是否有环(我回答快慢指针,因此引出下一个问题)
两个指针,一个走1步,一个走2步,龟兔赛跑问题
20.一个数组,有正有负,把正的移到右边,负的移到左边。
21.两个队列实现栈
《剑指Offer》原题
22.括号匹配
堆匹配
23.链表反转的操作,参数结构自己设计
24.一个数组,实现原地反转
25.一个只包含小写字母的字符串,去重生成一个只包含单一字母的字符串。例如“abadcab”变成"abdc",只让用最多一个额外的int变量
26.大数加法代码
27.推排序
不会的,直接背吧......
28.给一个字符串,由26个英文字母组成,判断其中有没有重复出现的元素,有返回true,没有返回false
桶排序,大于1 就返回ture