互联网公司面试问题总结之数据结构和算法

二、数据结构

部分一:

1图有几种存储方式?邻接矩阵与邻接表存储结构的优缺点?什么时候用什么结构?

2、(1排序算法哪些是稳定排序?归并排序常用于哪里?

2你所知道的最快的排序算法?

3若在数据库底层进行排序,该如何设计排序算法?

4快排的思路手写快排

5堆排序

6排序算法

7希尔排序

8Onlogn)的排序算法,选一个(写的堆排)

9知道的所有排序,及其时空复杂度和是否稳定

10排序为什么分稳定不稳定

11)设计一个排序类,你会选用哪种排序算法,为什么

常用排序的时间复杂度和优缺点

 

 12 那你说下排序算法吧
    – 这个也是我之前仔细研究过的。我把经典的八大排序的原理、时间复杂度、空间复杂度、稳定性都仔细说了一遍。(注意不要直接说答案,最好是能分享,这样面试官才知道你是真正理解了)
    – 我还回答了通排序(基数排序、计数排序)的原理以及和八大排序做了对比。

 

2查找的复杂度

查找算法

3、(1手写斐波那契数列?

2为什么不用递归?递归有什么不好?那为什么不用inline来写递归呢?如何来避免递归?

4、网络字节序与主机字节序的区别?为何要有这样的区别?

5内存对齐,为什么要内存对齐

6常见的页面置换算法?

7、(1)循环与递归的区别

2什么是递归,递归的几个条件?写递归要注意些什么?

8二叉树给出前序,中序求后序

9、字符串匹配,O(n+m)

字符串匹配(可以用KMP),本人写的KMP

10给一个单链表如何判断有环?

11、用什么数据结构保存cookie

12、手写vector删除元素,需要注意迭代器失效情况。

13一致性哈希

14、(1)如何判断一个图是否有环

2如何判断一个单链表是否有环?

15、(1红黑树查找、删除、增加的复杂度,为什么?

2)红黑树 特性和与AVL数比较 B树比较

16哈希表

17堆结构

181)二叉排序树的插入算法(手写)

2)二叉树先序遍历(手写)

191)链表判断环的入口

2)怎么判断两个链表是否相交

20  java 几种修饰符 的区别

21、说一下对B+树的了解

22、 索引有哪些?分别有什么特点?

23 HashMap问题

针对HashMap中某个Entry链太长,查找的时间复杂度可能达到O(n),怎么优化?

当时说了可能是容量或者hash算法的原因,说了扩容,寻找好的hash算法替代,然后面试官说不是这两个原因造成的,当时LZ也不知道JDK8中是采用红黑树进行处理的,就想不是为了降低查找时间复杂度吗,就说了用有序数组存储链表的数据,也就想到用有序数组查找的时间复杂度为O(nlogn )来解决,也是病急乱投医吧,最后面试官说也算是一种方法吧。

24、拓扑排序思想

25hash冲突的四种办法

26中序遍历的非递归做法?引出BFSDFS的区别

27、什么情况会栈溢出

28B+树和二叉树查找时间复杂度

29、常用的hash算法有哪些

 30、如果想实现一个线程安全的队列,可以怎么实现?
       JUC包里的ArrayBlockingQueue 还有LinkedBlockingQueue啥的又结合源码说了一通。 

 

部分二:

1. 链表与数组。

 2.队列和栈,出栈与入栈。

3. 链表的删除、插入、反向。

4. 字符串操作。

5. Hash表的hash函数,冲突解决方法有哪些。

6. 各种排序:冒泡、选择、插入、希尔、归并、快排、堆排、桶排、基数的原理、平均时间复杂度、最坏时间复杂度、空间复杂度、是否稳定。

7. 快排的partition函数与归并的Merge函数。

8. 对冒泡与快排的改进。

9. 二分查找,与变种二分查找。

10. 二叉树、B+树、AVL树、红黑树、哈夫曼树。

11. 二叉树的前中后续遍历:递归与非递归写法,层序遍历算法。

12. 图的BFSDFS算法,最小生成树prim算法与最短路径Dijkstra算法。

13. KMP算法。

14. 排列组合问题。

15. 动态规划、贪心算法、分治算法。(一般不会问到)

16. 大数据处理:类似10亿条数据找出最大的1000个数………等等

部分三:

1、给你一万个数,如何找出里面所有重复的数?用所有你能想到的方法,时间复杂度和空间复杂度分别是多少?

2、给你一个数组,如何里面找到和为K的两个数?

3100000个数找出最小或最大的10个?

4、一堆数字里面继续去重,要怎么处理?

 5、利用数组,实现一个循环队列类

6、 从N个无序数中寻找Top-k个最小数( 经典海量数据 )?

71G的内存可以装入2G的程序么?怎么装?

8、n级台阶问题

9、手写代码,有序数组查找某个元素出现的次数

10、手写螺旋矩阵打印

11象棋中马走日从A点到B点的最短路径走法

12、长为N的数组,元素范围是0-N-1,其中只有一个数是重复的,找出这个重复元素

13矩阵从左上角向右下角走,每次只能向右或者向下移动,求经过最大的路径

14n可以由完全平方数构成,求最小的完全平方数构成数。

15、(1两个栈实现一个队列

2)怎么找出数组中出现两次的数(有两个数出现两次,其他的都是一次)

3)旋转数组的最小值

4O1)时间复杂度删除单链表结点

5)约瑟夫环问题推导

6O1)实现取栈的最小

16给定一个2叉树,打印每一层最右边的结点

17给定一个数组,里面只有一个数出现了一次,其他都出现了两次。怎么得到这个出现了一次的数?

186基础上,如果有两个不同数的出现了一次,其他出现了两次,怎么得到这两个数?

19、无重复数组找出第K大的数字 引出堆排序(是否稳定,时间/空间复杂度)

20 给定n个数,寻找第k小的数,同时给出时间复杂度

21比较常见的算法题,也要考虑到n的大小,说了排序,最大堆,以及partition算法,面试官还让说我说就知道这几种

2210G个数进行排序,限制内存为1G

  大数问题,但是这10G个数可能是整数,字符串以及中文改如何排序,对中文排序没有回答出来。

23 链表删去指定值的节点

23 写一个类似解析字符串的小程序(感觉考点是正则表达式)

24求两个int数组的并集、交集

2511个汉诺塔问题,打印出转移路径,接着写一个二叉树前序遍历的代码,最后让写一个多叉树实现,并层次遍历的代码

 

    原文作者:约瑟夫环问题
    原文地址: https://blog.csdn.net/u011863767/article/details/52824722
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞