数据结构面试习题总结
- 有哪些数据结构?5
- 大量数据,随机取,随机存用什么数据结构
- 树
- 树的搜索 算法 有哪些?每一种有什么用途?
- 树有哪些用途
- 链表有哪几种 2
- 链表和数组的区别 3
- 链表取元素的时间复杂度、 如何优化这个时间复杂度 2
- 链表的 结构、特点、怎么快速遍历
- 怎么给链表在某一位置插入一个元素
- 哈希 结构 底层rehash操作 删除先访问旧表还是新表 增加结点先访问旧表还是新表
- 堆和栈的区别 2
- 队列和栈的区别 2
- 什么是二叉树
- 什么是二叉搜索树
- 二叉树的遍历都有哪些
- 二叉树 层序遍历
- 查找有哪些
- 排序 有哪几种(6)
- 各种排序算法的特点
- 堆 和 排序 解释一下
- 二分搜索(2)
- 递归(2)
- 事件分发以及画图
- 自定义UI
- 图片有那些类型,区别是什么?图片第三方库用过那些?
- 红黑树讲一下,五个特性,插入删除操作,时间复杂度?
- AVL树和 红黑树 的区别在哪?
- 快排的时间复杂度,最坏,平均,最好情况呢,
- 快速排序是稳定的吗?或者解释一下什么叫稳定?
- 堆排序的时间复杂度呢,建堆的复杂度是多少
- .树的搜索 算法 有哪些?每一种有什么用途?
有哪些数据结构?5
大量数据,随机取,随机存用什么数据结构
树
树的搜索 算法 有哪些?每一种有什么用途?
树有哪些树 以及特征
树有哪些用途
树的层次遍历和深度遍历怎么用?
链表有哪几种 2
链表和数组的区别 3
不同:
1.链表是链式的存储结构;数组是顺序的存储结构。
2.链表通过指针来连接元素与元素,数组则是把所有元素按次序依次存储。
3.链表的插入删除元素相对数组较为简单,不需要移动元素,且较为容易实现长度扩充,但是寻找某个元素较为困难;
4.数组寻找某个元素较为简单,但插入与删除比较复杂,由于最大长度需要再编程一开始时指定,故当达到最大长度时,扩充长度不如链表方便。
5.数组从栈中分配空间, 对于程序员方便快速,但自由度小。
链表从堆中分配空间, 自由度大但申请管理比较麻烦.
相同:
1.两种结构均可实现数据的顺序存储,构造出来的模型呈线性结构。
22.
怎么给 链表 在某一位置插入一个元素
链表取元素的时间复杂度、 如何优化这个时间复杂度 2
链表的 结构、特点、怎么快速遍历
怎么给链表在某一位置插入一个元素
哈希 结构 底层rehash操作 删除先访问旧表还是新表 增加结点先访问旧表还是新表
堆和栈的区别 2
1、堆空间的内存是动态分配的,一般存放对象,并且需要手动释放内存。当然,iOS引入了ARC(自动引用计数管理技术)之后,程序员就不需要用代码管理对象的内存了,之前MRC(手动管理内存)的时候,程序员需要手动release对象。另外,ARC只是一种中间层的技术,虽然在ARC模式下,程序员不需要像之前那么麻烦管理内存,但是需要遵循ARC技术的规范操作,比如使用属性限定符weak、strong、assigen等。因此,如果程序员没有按ARC的规则并合理的使用这些属性限定符的话,同样是会造成内存泄漏的。
2、栈空间的内存是由系统自动分配,一般存放局部变量,比如对象的地址等值,不需要程序员对这块内存进行管理,比如,函数中的局部变量的作用范围(生命周期)就是在调完这个函数之后就结束了。这些在系统层面都已经限定住了,程序员只需要在这种约束下进行程序编程就好,根本就没有把这块内存的管理权给到程序员,肯定也就不存在让程序员管理一说。
从申请的大小方面讲:
栈空间比较小;
堆空间比较大。
从数据存储方面来说:
栈空间中一般存储基本数据类型,对象的地址;
堆空间一般存放对象本身,block的copy等
队列和栈的区别 2
什么是二叉树
什么是二叉搜索树
二叉树的遍历都有哪些
求一个 二叉树 任意两节点的距离,时间复杂度是多少
二叉树 层序遍历
查找有哪些
一个比较有序的数组,用什么排序算法比较好
手撕 选择 排序
手撕快速 排序
排序 有哪几种(6)
解释一种排序算法
哪些是稳定的
各种排序算法的特点
选择 排序 的时间复杂度(2)
排序 算法 复杂度 以及什么时候最优 什么时候最差
堆 和 排序 解释一下
二分搜索(2)
递归(2)
递归怎么优化(2)
动态规划(DP)(2)
时间复杂度 空间复杂度(2)
- 1到n的数字,组成二叉搜索树的个数,递归,如何优化,记忆化,dp。时间复杂度,空间复杂度
- 算法题,二叉树 搜索中,两个节点互换了位置,找到这两个节点;用rand3实现rand7
- 算法题 ,整数数组无序,是否存在下标i 排序 的思路,
事件分发以及画图
自定义UI
图片有那些类型,区别是什么?图片第三方库用过那些?
红黑树讲一下,五个特性,插入删除操作,时间复杂度?
AVL树和 红黑树 的区别在哪?
快排的时间复杂度,最坏,平均,最好情况呢,
快速排序是稳定的吗?或者解释一下什么叫稳定?
堆排序的时间复杂度呢,建堆的复杂度是多少
.树的搜索 算法 有哪些?每一种有什么用途?
- zset采用什么数据结构
- 算法:十进制转化为二进制
- 逻辑:100个黑白球,最后剩哪种
-
- 算法 :.第K大的数
- 算法: 队列调度问题。优化这个队列调度,把这个队列调度的任务封装成类。
- 算法:反转链表
- 算法 : 数组 从左到右递增 从上到下递增 找一个数是否存在
- 算法 合并两个有序 链表 最小子数组的和
- 算法:合并两个有序列表
- 算法:数组 排序
- 算法:C++实现栈
- 代码题:一个文件里有五亿个ip地址,用tab分隔,不同的ip有一亿个,统计登录次数,从大到小排列,输出到另一个文件,内存限制100MB
- 代码:(重点在考虑异常)无序数组,找最大值,下标 合并两个数组
- 手撕代码:列表分子,k1 对应的value相同的放在同一列表里面
输入:[{‘k1’:1, ‘k2’:1}, {'k1 ‘:2, ‘k2’:2}, {‘k1’:1, ‘k2’:2}]
输出:[{‘k1’:1, ‘k2’:1}, {‘k1’, 1, ‘k2’: 2}], [{k1’: 2,‘k2’: 2}] - 手撕:括号匹配;对自己的代码写测试用例
- 算法 :(思路)怎么判断 链表 有环
- 算法:实现字符串的替换功能
- 算法:整数反转
- 算法题:单链表的反转
- 算法:1~n 自然数组排序,不能直接 arr[i] = i + 1,要求时间 O(n)O(n)
- 算法:连续子数组的最大和
- 算法:最长无重复子串
- .用Array实现FIFO(不限长度),实现push,pop,length要求只能用原生数组,pop,length要求O1,push最好保证O1
- 用已有数据结构完成以下操作:insert,delete random(随即返回一个数,要求概率相等) delete和random要求O1,insert最好O1(insert完全不知道咋保证O1),在面试官引导下用set+map+array做完,但是不知道咋保证insert O
- 寻找字符串中出现最多的字符
- 连续型和非连续型,使用场景
- 二维数组查找
- 最长重复字串
- 两个栈实现队列
- 排序 方法 快排思想 2
- .为什么索引用B+树
- 数据结构算法
- Hashmap哈希-处理哈希冲突的分析方法
- 堆排序,大堆,小堆,堆排序的原理