导航:首页 > 源码编译 > 算法面试宝典

算法面试宝典

发布时间:2023-02-26 11:00:09

android 面试,算法题。

final int size = data.length;
for(int i = 0; i< size; i++){
if(data[i] == 0xffffffff)
data[i] = 0x80ffffff;
}

不知道你是不是这个意思。

㈡ 大公司笔试面试有哪些经典算法题目

1、二维数组中的查找

具体例题:如果一个数字序列逆置之后跟原序列是一样的就称这样的数字序列为回文序列。例如:{1, 2, 1}, {15, 78, 78, 15} , {112} 是回文序列, {1, 2, 2}, {15, 78, 87, 51} ,{112, 2, 11} 不是回文序列。现在给出一个数字序列,允许使用一种转换操作:选择任意两个相邻的数,然后从序列移除这两个数,并用这两个数字的和插入到这两个数之前的位置(只插入一个和)。现在对于所给序列要求出最少需要多少次操作可以将其变成回文序列?



㈢ 面试官常问十大经典算法排序(用python实现)

算法是一种与语言无关的东西,更确切地说就算解决问题的思路,就是一个通用的思想的问题。代码本身不重要,算法思想才是重中之重

我们在面试的时候总会被问到一下算法,虽然算法是一些基础知识,但是难起来也会让人非常头疼。

排序算法应该算是一些简单且基础的算法,但是我们可以从简单的算法排序锻炼我们的算法思维。这里我就介绍经典十大算法用python是怎么实现的。

十大经典算法可以分为两大类:

比较排序: 通过对数组中的元素进行比较来实现排序。

非比较排序: 不通过比较来决定元素间的相对次序。


算法复杂度

冒泡排序比较简单,几乎所有语言算法都会涉及的冒泡算法。

基本原理是两两比较待排序数据的大小 ,当两个数据的次序不满足顺序条件时即进行交换,反之,则保持不变。

每次选择一个最小(大)的,直到所有元素都被输出。

将第一个元素逐个插入到前面的有序数中,直到插完所有元素为止。

从大范围到小范围进行比较-交换,是插入排序的一种,它是针对直接插入排序算法的改进。先对数据进行预处理,使其基本有序,然后再用直接插入的排序算法排序。

该算法是采用 分治法 对集合进行排序。

把长度为n的输入序列分成两个长度为n/2的子序列,对这两个子序列分别采用归并排序,最终合并成序列。

选取一个基准值,小数在左大数在在右。

利用堆这种数据结构所设计的一种排序算法。

堆是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。利用最大堆和最小堆的特性。

采用字典计数-还原的方法,找出待排序的数组中最大和最小的元素,统计数组中每个值为i的元素出现的次数,对所有的计数累加,将每个元素放在新数组依次排序。

设置一个定量的数组当作空桶;遍历输入数据,并且把数据一个一个放到对应的桶里去;对每个不是空的桶进行排序;从不是空的桶里把排好序的数据拼接起来。

元素分布在桶中:


然后,元素在每个桶中排序:

取得数组中的最大数,并取得位数;从最低位开始取每个位组成新的数组;然后进行计数排序。

上面就是我整理的十大排序算法,希望能帮助大家在算法方面知识的提升。看懂之后可以去试着自己到电脑上运行一遍。最后说一下每个排序是没有调用数据的,大家记得实操的时候要调用。

参考地址:https://www.runoob.com/w3cnote/ten-sorting-algorithm.html

㈣ 面试难点!常用算法技巧之“滑动窗口”

滑动窗口,顾名思义,就是有一个大小可变的窗口,左右两端方向一致的向前滑动(右端固定,左端滑动;左端固定,右端滑动)。

可以想象成队列,一端在push元素,另一端在pop元素,如下所示:

假设有数组[a b c d e f g h]
一个大小为3的滑动窗口在其上滑动,则有:

1、单层循环

2、双层循环

模板只是一个解题思路,具体的题目可能需要具体分析,但是大体框架是不变的。
记住: 多刷题,多总结,是王道

1、最长不含重复字符的子字符串

2、绝对差不超过限制的最长连续子数组

3、无重复字符的最长子串

4、替换后的最长重复字符

滑动窗口算法就是用以解决数组/字符串的子元素问题
滑动窗口算法可以将嵌套的for循环问题,转换为单循环问题,降低时间复杂度

生命不止坚毅鱼奋斗,有梦想才是有意义的追求
给大家推荐一个免费的学习交流群:
最后,祝大家早日学有所成,拿到满意offer,快速升职加薪,走上人生巅峰。
Java开发交流君样:756584822

㈤ 测试开发面试必知算法

测试开发的技能之一就是需要掌握一些开发的语言,而针对于考察开发语言,业界内比较容易采用的方式就是考察各种算法。在此做一个简单的总结(最近比较喜欢玩Python,所以都是以Python为例子,其它的语言类推。)

冒泡排序

冒泡排序算法的运作如下:(从后往前)
比较相邻的元素。如果第一个比第二个大,就交换他们两个。
对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
针对所有的元素重复以上的步骤,除了最后一个。
持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

实例:对列表 [2, 8, 4, 7, 5, 9, 0]进行冒泡排序

递归

递归过程一般通过函数或子过程来实现。递归方法:在函数或子过程的内部,直接或者间接地调用自己的算法。

实例:要计算1-10的10位数字的乘积,直观的算法是1 2 3 4 5 6 7 8 9,利用递归则思路是循环执行n*n-1,直到n=1时

二叉树遍历算法
从二叉树的递归定义可知,一棵非空的二叉树由根结点及左、右子树这三个基本部分组成。因此,在任一给定结点上,可以按某种次序执行三个操作:
⑴访问结点本身(N),
⑵遍历该结点的左子树(L),
⑶遍历该结点的右子树(R)。
以上三种操作有六种执行次序:
NLR、LNR、LRN、NRL、RNL、RLN。

二叉树的节点表示可以使用

前序遍历:根节点->左子树->右子树
中序遍历:左子树->根节点->右子树
后序遍历:左子树->右子树->根节点

实例:求二叉树深度和宽度
求深度用递归;求宽度用队列,然后把每层的宽度求出来,找出最大的就是二叉树的宽度

字符串倒序输出

思路一:索引的方法

思路二:借组列表进行翻转

后续还有的话会继续添加的。

㈥ 如何回答面试算法问题

给定一个有序数组xxx 中,"有序"是否可以利用?

a: 用几个简单的测试用例,检验一下
b:暴力解法 通常都是思考的起点.

a: 遍历常见的算法思路
b: 遍历常见的数据结构

c: 空间和时间的交换?
d: 预处理数据 => 排序
e: 在瓶颈处找到答案

a: 极端条件判断
数组为空? 字符串==null? 数字==0? 指针->null?
b: 变量名等 符合规范
c: 注重模块化,复用性

算法在1s之内 可解决的问题:
O(n^2) 的算法可处理大约10^4级别的数据
O(n) 的算法可处理大约10^8级别的数据
O(nlogn)的算法可处理大约10^7级别的数据

㈦ 计算机视觉算法工程师常见面试题1

参考: https://www.hu.com/column/c_1170719557072326656

反卷积也称为转置卷积,如果用矩阵乘法实现卷积操作,将卷积核平铺为矩阵,则转置卷积在正向计算时左乘这个矩阵的转置WT,在反向传播是左乘W,与卷积操作刚好相反,需要注意的是,反卷积不是卷积的逆运算。
[知乎问题+caffe实现]

实现上采样;近似重构输入图像,卷积层可视化。

只要激活函数选择得当,神经元的数量足够,至少有一个隐含层的神经网络可以 逼近闭区间上任意一个连续函数到任意指定的精度。

判别模型,直接输出类别标签,或者输出类后验概率p(y|x)
[ https://www.hu.com/question/268906476]
[ https://zhuanlan.hu.com/p/40024110]
[ https://zhuanlan.hu.com/p/159189617]

BN是在 batch这个维度上进行归一化,GN是计算channel方向每个group的均值方差.

检测结果与 Ground Truth 的交集比上它们的并集,即为检测的准确率 IoU

内存/显存占用;模型收敛速度等

Hessian矩阵是n*n, 在高维情况下这个矩阵非常大,计算和存储都是问题。

mini-batch太小会导致收敛变慢,太大容易陷入sharp minima,泛化性不好。

可以把dropout看成是 一种ensemble方法,每次做完dropout相当于从原网络中找到一个更瘦的网络。

pooling操作虽然能增大感受野,但是会丢失一些信息。空洞卷积在卷积核中插入权重为0的值,因此每次卷积中会skip掉一些像素点;

空洞卷积增大了卷积输出每个点的感受野,并且不像pooling会丢失信息,在图像需要全局信息或者需要较长sequence依赖的语音序列问题上有着较广泛的应用。

表达式为:

使用BN的原因是网络训练中每一层不断改变的参数会导致后续每一层输入的分布发生变化,而学习的过程又要使每一层去适应输入的分布,因此不得不降低网络的学习率,并且要小心得初始化(internal covariant shift)
如果仅通过归一化方法使得数据具有零均值和单位方差,则会降低层的表达能力(如使用Sigmoid函数时,只使用线性区域)
BN的具体过程(注意第三个公式中分母要加上epsilon)

最好的解释是通过1 * 1卷积核能实现多个channel间的解耦合,解耦cross-channel correlation和spatial correlation。
【但是因为解耦不彻底,因此后续有了mobile net的组卷积方式和shuffle net组卷积方式】

由于 1×1 并不会改变 height 和 width,改变通道的第一个最直观的结果,就是可以将原本的数据量进行增加或者减少。改变的只是 height × width × channels 中的 channels 这一个维度的大小而已。

1*1卷积核,可以在保持feature map尺度不变的(即不损失分辨率)的前提下大幅增加非线性特性(利用后接的非线性激活函数),把网络做的很deep。

备注:一个filter对应卷积后得到一个feature map,不同的filter(不同的weight和bias),卷积以后得到不同的feature map,提取不同的特征,得到对应的specialized neuron。

例子:使用1x1卷积核,实现降维和升维的操作其实就是channel间信息的线性组合变化,3x3,64channels的卷积核后面添加一个1x1,28channels的卷积核,就变成了3x3,28channels的卷积核,原来的64个channels就可以理解为跨通道线性组合变成了28channels,这就是通道间的信息交互

注意:只是在channel维度上做线性组合,W和H上是共享权值的sliding window

并不能说明这个模型无效导致模型不收敛的原因可能有

A. 在实际场景下,应尽量使用ADAM,避免使用SGD
B. 同样的初始学习率情况下,ADAM的收敛速度总是快于SGD方法
C. 相同超参数数量情况下,比起自适应的学习率调整方式,SGD加手动调节通常会取得更好效果
D. 同样的初始学习率情况下,ADAM比SGD容易过拟合

A.保证每一层的感受野不变,网络深度加深,使得网络的精度更高
B.使得每一层的感受野增大,学习小特征的能力变大
C.有效提取高层语义信息,且对高层语义进行加工,有效提高网络准确度
D.利用该结构有效减轻网络的权重

A.计算简单
B.非线性
C.具有饱和区

D.几乎处处可微
【relu函数在0处是不可微的。】

A.Adam的收敛速度比RMSprop慢
B.相比于SGD或RMSprop等优化器,Adam的收敛效果是最好的
C.对于轻量级神经网络,使用Adam比使用RMSprop更合适
D.相比于Adam或RMSprop等优化器,SGD的收敛效果是最好的
【SGD通常训练时间更长,容易陷入鞍点,但是在好的初始化和学习率调度方案的情况下,结果更可靠。如果在意更快的收敛,并且需要训练较深较复杂的网络时,推荐使用学习率自适应的优化方法。】

A.使用ReLU做为激活函数,可有效地防止梯度爆炸
B.使用Sigmoid做为激活函数,较容易出现梯度消失
C.使用Batch Normalization层,可有效的防止梯度爆炸
D.使用参数weight decay,在一程度上可防止模型过拟合

对结果存疑。认为二者皆可防止。

A.SGD
B.FTRL
C.RMSProp
D.L-BFGS

L-BFGS(Limited-memory BFGS,内存受限拟牛顿法)方法:
所有的数据都会参与训练,算法融入方差归一化和均值归一化。大数据集训练DNN,容易参数量过大 (牛顿法的进化版本,寻找更好的优化方向,减少迭代轮数)从LBFGS算法的流程来看,其整个的核心的就是如何快速计算一个Hesse的近似:重点一是近似,所以有了LBFGS算法中使用前m个近似下降方向进行迭代的计算过程;重点二是快速,这个体现在不用保存Hesse矩阵上,只需要使用一个保存后的一阶导数序列就可以完成,因此不需要大量的存储,从而节省了计算资源;重点三,是在推导中使用秩二校正构造了一个正定矩阵,即便这个矩阵不是最优的下降方向,但至少可以保证函数下降。
FTRL(Follow-the-regularized-Leader)是一种适用于处理超大规模数据的,含大量稀疏特征的在线学习的常见优化算法,方便实用,而且效果很好,常用于更新在线的CTR预估模型;FTRL在处理带非光滑正则项(如L1正则)的凸优化问题上表现非常出色,不仅可以通过L1正则控制模型的稀疏度,而且收敛速度快;

A.LSTM在一定程度上解决了传统RNN梯度消失或梯度爆炸的问题
B.CNN相比于全连接的优势之一是模型复杂度低,缓解过拟合
C.只要参数设置合理,深度学习的效果至少应优于随机算法
D.随机梯度下降法可以缓解网络训练过程中陷入鞍点的问题

实际上,现在有很多针对小目标的措施和改良,如下:

最常见的是Upsample来Rezie网络输入图像的大小;

用dilated/astrous等这类特殊的卷积来提高检测器对分辨率的敏感度;(空洞卷积是针对图像语义分割问题中下采样会降低图像分辨率、丢失信息而提出的一种卷积思路。利用添加空洞扩大感受野,让原本3 x3的卷积核,在相同参数量和计算量下拥有5x5(dilated rate =2)或者更大的感受野,从而无需下采样。在保持参数个数不变的情况下增大了卷积核的感受野)

有比较直接的在浅层和深层的Feature Map上直接各自独立做预测的,这个就是我们常说的尺度问题。

用FPN这种把浅层特征和深层特征融合的,或者最后在预测的时候,用浅层特征和深层特征一起预测;

SNIP(Scale Normalization for Image Pyramids)主要思路:

在训练和反向传播更新参数时,只考虑那些在指定的尺度范围内的目标,由此提出了一种特别的多尺度训练方法。

㈧ 【数分面试宝典】数分面试常考业务题(三)

EDA(Exploratory Data Analysis)即数据探索性分析,需要对数据集中的变量进行统计和分布描述、了解变量间的相互关系,从整体上了解数据集的数据特征。探索性分析要对调查总体所有变量的有关数据进行统计性描述,主要包括数据的频数分析、集中趋势分析、离散程度分析、分布以及一些基本的统计图形。

①数据的频数分析。在数据的预处理部分,利用频数分析和交叉频数分析可以检验异常值

②数据的集中趋势分析。用来反映数据的一般水平,常用的指标有平均值、中位数和众数等。

③数据的离散程度分析。主要是用来反映数据之间的差异程度,常用的指标有方差和标准差。

④数据的分布。在统计分析中,通常要假设样本所属总体的分布属于正态分布,因此需要用偏度和峰度两个指标来检查样本数据是否符合正态分布。

⑤数据的相关性分析。探索不同变量之间的相关性,可以使用相关性图进行展示,表示各变量之间的相关程度,为后续机器学习的特征选择提供依据。

环比:与相连续的上一个统计周期进行对比,环比增长速度=(本期数-上期数)÷上期数×100% ,反映本期比上期增长了多少,如2021年12月和2021年11月对比,环比的好处是可以更直观的表明阶段性的变换,但是会受季节性因素影响。

同比:是对去年同期的一个统计阶段进行对比,同比增长率=(本期数-同期数)÷同期数×100%,如今年的这个月和去年的这个月,同比的好处是可以排除一部分季节因素。

相关性的前提是各个变量之间是相互独立的,业务上来说,每个指标之间是没有影响的,相关性系数:0.5以下相关性较弱,0.5 -0.8中度相关,大于0.8较强相关。

如果A和B相关,会有以下几个推论:

A导致B:充分条件

B导致A:必要条件

C导致A和B:A和B同源

A和B如果有因果:充分且必要条件

相关和因果的区别:

相关:两个变量或多个变量之间的相互影响程度;核心点:变量与变量之间互为相关,没有先后顺序;

因果: 前一个事件对后一个事件的作用的关系及强度,核心点:有严格的先后顺序(变化可能会有延迟),如蝴蝶效应。

好玩的题目:

Y=0.5X  y和x是相关还是因果?

y=0.5X+0.5z  y和x是相关还是因果?

答案:都是相关

因果的前提是:有一个东西是先发生,而相关是没有先后顺序的,所以上述2个都是相关,而不是因果。

Q4、什么是聚类?业务应用场景?常见算法?

定义:

将相似的对象,将对象的特征进行抽象,通过算法将特征相似的对象化为一类,是一种无监督机器学习算法。

考点1:对于聚类,如何确定分类的数量N;

考点2:如何选择进行聚类的特征,比如要区分男女,有喉结的就是男生,留长发的就是女生;

应用场景:

个性化推荐(电商):相似用户行为相似,会分到某个类,如用户分层;

用户画像:基于用户的购买偏好、消费能力进行用户画像;

常见算法:

Kmeans聚类

DBSCAN聚类

Q5、什么是分类?业务应用场景?常见算法?

定义:

学习已有分类样本的特征,对新数据进行划分,是一种有监督的机器学习算法,分类是明确的,是有历史样本可学习的。

应用场景:

互联网金融用户信用等级分类

垃圾邮件分类

常见算法:

逻辑回归

SVM

贝叶斯

决策树

KNN

XGboost

Q6、什么是回归?业务应用场景?常见回归算法?

定义:

两个或多个变量之间是否相关,相关强度,并建立数学模型,定量评估

人话:我和你有没有关系,什么关系,深到什么程度。

本质:找到一条之间最合适的平均线,让线的附近的点分布均匀

应用场景:

运营推广中,是不是花的钱越多,买的流量越大,品类越丰富,用户活跃越高,那么,多到什么程度、大到什么程度、丰富到什么程度、用户的活跃最高,留存最高;

智慧城市的交通,预测交通拥塞程度:自变量:时间段、商业指数、住宅指数、城区指数、道路指数,因变量:两个连续信号灯之间道路的通行时间。

常见回归算法:

线性回归

lasso回归

ridge回归

树回归

Q7、时间序列预测的原理是什么?有哪些应用场景?

原理:

当自变量是时间时,且数据在时间上呈现出一定的规律,那么这种情况一般都可以使用时间序列预测接下来一段时间的数据走势。这个规律表现为:数据整体变化的趋势(可以理解为一条表征趋势的直线)、季节性(可以理解为按照一定的周期重复出现的模式)和随机性(可以理解为在零附近毫无规律的白噪声)组成,时间序列就是将数据按照这三个部分分别拆解,再基于历史数据进行组合预测。

应用场景:

一般应用于年度的KPI预测,产品的活跃用户数趋势,羽绒服的销量等。

Q8、时间序列预测需要注意的点?和回归有何区别?

需要注意的点:

时间间隔是固定的;

最近的数据对于预测影响程度越大;

预测是有季节性的,这里的季节性不一定是春夏秋冬,凡是以一定周期重复出现的都可以称为有季节性;

回归预测和时间序列预测的区别:

回归是自变量对于因变量的趋势,用以表征自变量和因变量之间的定量关系,一般来说自变量和因变量只能是连续的数据;

时间序列预测的自变量可以是任何数据,包括时间,只要数据呈现出周期性的趋势;

回归不能做季节性的预测;

以上就是【数分面试宝典】系列—面试业务题系列第3篇文章的内容,部分历史文章请回翻公众号,更多数据分析面试笔试的文章持续更新中,敬请期待,如果觉得不错,也欢迎分享、点赞和点在看哈

㈨ 算法岗面试——数学基础总结

在牛客网上的好资源真的很多,根据牛客网 算法面试宝典 写份总结,希望在面试过程中能好好表现。

SGD为随机梯度下降,每一次迭代计算数据集的mini-batch的梯度,然后对参数进行跟新。

Momentum参考了物理中动量的概念,前几次的梯度也会参与到当前的计算中,但是前几轮的梯度叠加在当前计算中会有一定的衰减。

Adagard在训练的过程中可以自动变更学习的速率,设置一个全局的学习率,而实际的学习率与以往的参数模和的开方成反比。

Adam利用梯度的一阶矩估计和二阶矩估计动态调整每个参数的学习率,在经过偏置的校正后,每一次迭代后的学习率都有个确定的范围,使得参数较为平稳。

L0范数是指向量中非0的元素的个数。

L1范数是指向量中各个元素绝对值之和。

L2范数是指向量各元素的平方和然后求平方根。

值域为(0,1)

最大似然估计提供了一种给定观察数据来评估模型参数的方法,而最大似然估计中的采样满足所有采样都是独立同分布的假设。
最大后验概率是根据经验数据获难以观察量的点估计,与最大似然估计最大的不同是最大后验概率融入了要估计量的先验分布在其中,所以最大后验概率可以看做规则化的最大似然估计。

假设 为总体分布中的参数, 的先验密度函数为 ,而抽样信息算得的后验密度函数与 具有相同的函数形式,则称 为 的共轭先验分布。

定义:两个字串之间,由一个转成另一个所需的最少编辑操作次数,如果它们的距离越大,说明它们越是不同。许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。

作用:比较两个字符串的相似度

算法步骤:
1.str1或str2的长度为0返回另一个字符串的长度。
2.初始化(n+1) (m+1)的矩阵d,并让第一行和列的值从0开始增长。扫描两字符串(n m级的),如果:str1[i] == str2[j],用temp记录它,为0。否则temp记为1。然后在矩阵d[i,j]赋于d[i-1,j]+1 、d[i,j-1]+1、d[i-1,j-1]+temp三者的最小值。
3.扫描完后,返回矩阵的最后一个值d[n][m]即是它们的距离。

阅读全文

与算法面试宝典相关的资料

热点内容
如何确认方舟编译器 浏览:664
奶粉源箱源码什么意思 浏览:178
台州程序员兼职一般去哪些网站 浏览:388
旧版本怎么下载到新的安卓 浏览:966
flash个人网站源码下载 浏览:723
javasocketbyte 浏览:264
素描基础教程pdf 浏览:541
香港商报pdf版 浏览:427
安卓手机怎么录制吉他弹奏 浏览:382
ie文件夹缓存在哪里 浏览:264
围棋排名算法 浏览:963
zigbee加密算法 浏览:464
柏杨版资治通鉴pdf 浏览:395
事业编程序员下班时间 浏览:10
linux中命令大全 浏览:39
pic单片机学习网站 浏览:164
843除6的算法 浏览:377
arduino编程视频 浏览:745
pdf背景绿色 浏览:613
记事本dos命令 浏览:276