- 做题 全排列
LC46
- B+树和红黑树的区别
- 从一百万个数里面找前1000大的(堆排,建一个大小为1000的小根堆),除了堆排呢?(快排,二分+partition)
- 分析一下上面两个的复杂度,哪个快(口糊了堆排,因为当时算出来快排是nlogn,堆排是nlogk的。事后发现百度上说快排均摊是O(2n)的,可以通过数列求和证明)
- 算法题:大整数加法
LC415
- 算法题:给你一组乱序的数组a,要找出一组l,r,使得a[r]-a[l]最大
LC 53 剑指Offer42
- 算法题:用一个3*4的二维指针数组,完成数组顺时针翻转
LC 48
- 二叉树的遍历方式,如果按层次遍历打印呢?
队列
快排 | 冒泡排序,快速排序- 递归的过程中会出现什么样的问题?
递归的优点:
1)大问题化为小问题,可以极大的减少代码量;
2)用有限的语句来定义对象的无限集合.;
3)代码更简洁清晰,可读性更好
递归的缺点
1)递归调用函数,浪费空间;
2)递归太深容易造成堆栈的溢出;
- 给出一个杨辉矩阵 求第k大的元素
- 三个链表合并
代码找错
就不问你基础了,之前的面试已经问了很多了,来做一个题吧
提问时间:这个组主要是实现一个浏览器内核,从头造轮子,包括智能指针之类的都是自己实现的。
- 实现一个parser,要求能够parse下面这样的串,并返回一个树。要求检查
<a></a>
这样的标签必须能够对应,不能是<a></aa>
面试官人特别好,一直在指导我。这个题要注意new出来的东西在匹配失败的时候别忘了delete。LC里有几个类似这种parser的题,见个人博客 - 设计parser
算法题:
- 最后是两道算法题,不是很难,奇偶位置分别升序和降序的链表转化为升序链表
- 旋转数组找最小值(本来只有一道,但是第一道做完还有时间就又出了一道)。
- 最后就直接一道算法题:找出n个长度相同的有序数组合并为一个有序数组后的中位数,我一开始也是笨办法两两合并的归并,面试官将问题简化为只找到两个有序数组合并后的中位数,不断提示可以优化后终于想到比O(n)更好的就是O(logn),写出答案。
- 最后是一道算法题,合并n个有序数组,每个数组长度不一定相同,我当时想的是两两合并,总体用归并的思想,面试官问了空间复杂度,说性能不是很好。
- 最后是一道算法题,实现LFU,之前刷题时遇到过,但是太久了很多细节忘记了,写了一会和面试官讲了思路,面试官说时间有限就先这样吧,但肯定了思路说等通知。
- 算法题:滑动窗口匹配字符串
有m个不重复的字符,有一个长度为n的字符串,判断字符串中是否存在包含对应所以字符的子串,不要求顺序,返回起始位置,如:[‘a’, ‘b’, ‘c’, ‘d’],和“tbcacbdata", 返回3。 - 手撕代码 求m个数中最大的n个数
- 编程题:类似LC93复原IP地址的题目。给定一个全为数字的字符串,要将字符串分为5个数字,每个数字不能超过600。
- 编程题:LC92 翻转链表m到n:个人博客题解。自己写了一个简单的测试用例测试了一下。写的reverse函数。
- 算法题:斐波那契数列
- 柱子接水问题,单调栈解法,面试官不满意,要求O(1)空间复杂度
- 算法题
- 手撕智能指针
- 算法题,多线程打印ABCD
- 算法题:二分法求浮点数平方根,不得递归,精度要求0.001
- 反转链表
- 算法:多个有序数组排序 vector fun( vector<vector > )
先用了priority_queue + int [], 面试官同意想法后开始写,但是后来发现复杂度太高,改成map+int[]。后来网上查了,会写一个类解决(和我的想法也差不多)。总共写了40分钟(用法不熟悉 写得有点慢),写完面试官说“时间差不多了,结束“。 (以为二面要凉了,没想到5分钟后接到电话约三面,hr每次都说” 面试官已经在等你了,快去吧“)
- 算法:[1 2 3 4 5 6] 排列成[1 3 5 2 4 6] (奇数排右边,偶数排左边,不考虑顺序)
(剑指offer原题)我先用了冒泡,然后面试官问了时间复杂度(O(n2)),想了一会后改成O(n)
- 股票问题 ([1 3 5 7 2 3 ]是每日股票价格,买一次卖一次,问如何使得收益最大,即求最大差)