1)请简单解释算法是什么?
算法是一个定义良好的计算过程,它将一些值作为输入并产生相应的输出值。简单来说,它是将输入转换为输出的一系列计算步骤。
2)解释什么是快速排序算法?
快速排序算法能够快速排序列表或查询。它基于分割交换排序的原则,这种类型的算法占用空间较小,它将待排序列表分为三个主要部分:
小于Pivot的元素
枢轴元素Pivot(选定的比较值)
大于Pivot的元素
3)解释算法的时间复杂度?
算法的时间复杂度表示程序运行完成所需的总时间,它通常用大O表示法来表示。
4)请问用于时间复杂度的符号类型是什么?
用于时间复杂度的符号类型包括:
Big Oh:它表示小于或等于目标多项式
Big Omega:它表示大于或等于目标多项式
Big Theta:它表示与目标多项式相等
Little Oh:它表示小于目标多项式
Little Omega:它表示大于目标多项式
5)解释二分法检索如何工作?
在二分法检索中,我们先确定数组的中间位置,然后将要查找的值与数组中间位置的值进行比较,若小于数组中间值,则要查找的值应位于该中间值之前,依此类推,不断缩小查找范围,直至得到最终结果。
6)解释是否可以使用二分法检索链表?
由于随机访问在链表中是不可接受的,所以不可能到达O(1)时间的中间元素。因此,对于链表来说,二分法检索是不可以的(对顺序链表或排序后的链表是可以用的)。
7)解释什么是堆排序?
堆排序可以看成是选择排序的改进,它可以定义为基于比较的排序算法。它将其输入划分为未排序和排序的区域,通过不断消除最小元素并将其移动到排序区域来收缩未排序区域。
8)说明什么是Skip list?
Skip list数据结构化的方法,它允许算法在符号表或字典中搜索、删除和插入元素。在Skip list中,每个元素由一个节点表示。搜索函数返回与key相关的值的内容。插入操作将指定的键与新值相关联,删除操作可删除指定的键。
9)解释插入排序算法的空间复杂度是多少?
插入排序是一种就地排序算法,这意味着它不需要额外的或仅需要少量的存储空间。对于插入排序,它只需要将单个列表元素存储在初始数据的外侧,从而使空间复杂度为O(1)。
10)解释什么是“哈希算法”,它们用于什么?
“哈希算法”是一个哈希函数,它使用任意长度的字符串,并将其减少为唯一的固定长度字符串。它用于密码有效性、消息和数据完整性以及许多其他加密系统。
11)解释如何查找链表是否有循环?
要知道链表是否有循环,我们将采用两个指针的方法。如果保留两个指针,并且在处理两个节点之后增加一个指针,并且在处理每个节点之后,遇到指针指向同一个节点的情况,这只有在链表有循环时才会发生。
12)解释加密算法的工作原理?
加密是将明文转换为称为“密文”的密码格式的过程。要转换文本,算法使用一系列被称为“键”的位来进行计算。密钥越大,创建密文的潜在模式数越多。大多数加密算法使用长度约为64到128位的固定输入块,而有些则使用流方法。
13)列出一些常用的加密算法?
一些常用的加密算法是:
3-way
Blowfish
CAST
CMEA
GOST
DES 和Triple DES
IDEA
LOKI等等
14)解释一个算法的最佳情况和最坏情况之间有什么区别?
·最佳情况:算法的最佳情况解释为算法执行最佳的数据排列。例如,我们进行二分法检索,如果目标值位于正在搜索的数据中心,则这就是最佳情况,最佳情况时间复杂度为0。
·最差情况:给定算法的最差输入参考。例如快速排序,如果选择关键值的子列表的最大或最小元素,则会导致最差情况出现,这将导致时间复杂度快速退化到O(n2)。
15)解释什么是基数排序算法?
基数排序又称“桶子法”,是通过比较数字将其分配到不同的“桶里”来排序元素的。它是线性排序算法之一。
16)解释什么是递归算法?
递归算法是一个解决复杂问题的方法,将问题分解成较小的子问题,直到分解的足够小,可以轻松解决问题为止。通常,它涉及一个调用自身的函数。
17)提到递归算法的三个定律是什么?
所有递归算法必须遵循三个规律
递归算法必须有一个基点
递归算法必须有一个趋向基点的状态变化过程
递归算法必须自我调用
18)解释什么是冒泡排序算法?
冒泡排序算法也称为下沉排序。在这种类型的排序中,要排序的列表的相邻元素之间互相比较。如果它们按顺序排列错误,将交换值并以正确的顺序排列,直到最终结果“浮”出水面。
https://www.zhihu.com/question/24964987/answer/200681301
常考面试算法题类型总结
结合2017春招和秋招真题,以下几类算法题最常考,汇总了一下:
一、暴力枚举
好多鱼!
DNA合成
连续整数
序列和
01翻转
最长公共连续子串
组装三角形
最小的矩形
字符串分类
优美的回文串
赶去公司
调整队形
集合
涂棋盘
小易记单词
分饼干
买帽子
度度熊回家
寻找三角形
有趣的排序
神奇数
添加字符
数组变换
二、动态规划
页码统计
创造新世界
双核处理
堆砖块
不等式数列
牛牛的数列
暗黑的字符串
数字和为sum的方法数
三、DFS/BFS
推箱子
工作安排
幸运的袋子
饥饿的小易
跳石板
地下迷宫
四、数学
超级素数幂
找整除
魔力手环
混合颜料
最大的奇约数
末尾0的个数
五、模拟实现
平衡数
消除重复元素
奇怪的表达式求值
变换次数
六、贪心算法
排序子序列
组队竞赛
训练部队
七、字符串算法
循环单词