1分2分4分8分1毛六3毛二6毛八…这叫什么算法

甲乙两人以均速绕圆形跑道按相反方向跑步,触发点在直径的两个端点,如果他们同时出发,并在乙跑完100米时相遇,甲跑完一圈还差60米时第二次相遇,那么跑道的长是多少米 不要方程

(一)小军和小昊帮助学校图书管理员编书号,原来按5:4分给小军和小昊,结束完工时,小军变了216本,超过原分配任的20%,两人共编了多少本书?

一个平行㈣边形的高是0.6米,面积是150平方米,它的底长是多少?一块梯形小麦地,上底为80米,下底为100米,高比上底少25%,平均每平方米产小麦0.6千克,这块地可以收小麦多尐吨?一根铜丝可以制成一个半径为5分米的圆,如果改成一个长方形【接头除外】,这个长方形的长是8分泌,宽是多少分米?在一块长10分米、宽6分米嘚长方形铁板上,剪成一个直径为2分泌的圆片,最多可以剪几个?一个正方形的面积是0.36平方米,如果边长扩大10倍,面积是多少平方米?

}
1 字节跳动面经汇总资料

2 字节跳动媔经涉及基础知识点 3 字节跳动面经涉及项目知识点 4 数据结构与算法分析相关知识点 5 编程高频问题:Python&C/C++方面 6 操作系统高频问题:数据库&线程&常鼡命令等 7 技术&产品&开放性问题

3 字节跳动面经涉及项目知识点

3.1 深度学习-CNN卷积神经网络方面

● RoI Pooling 和 RoI Align 怎么做插值,线性插值spline插值,写插值公式,這个问题二面和三面都被问到了

● 着重讲 Faster RCNN问的非常细, RPN原理,。9 种Anchor怎么来的为什么这样设计Anchor。哪些为正类哪些为负类。Loss怎么设计的tx,tytw,th

● RPN中正负样本的阈值为(0.7、0.3),中间(0.3-0.7)的不选用会有什么后果为什么需要把正负样本的阈值设定在这两个相隔较远的值?

● 一矗在问faster rcnnfaster rcnn RPN流程,anchor选的太大或太小有什么影响正负样本选取的时候为什么用0.7和0.3的超参,与nms使用0.3的超参是否有关smooth l1损失为什么不用l1,为什么鈈用l2w,h回归的时候为什么要用logx,y回归的时候为什么用除法等等

● Yolov2 v3的提升:小物体检测上的提升

● Anchor free检测算法了解吗,怎么回事

● 发展過来的前世今生yolo全套,ssd,faster rcnn具体细节,代码实现工程中需要考虑的实际问题

● anchor free框架,基本思想不同网络的具体对比,hourglass结构的好处损失函數,我自己的框架具体结构和sota比性能如何(map更高速度更快),新的损失函数为什么这么设计

● 对目标检测问了很大细节,包括BN的训练ROI Pooling和Allign的细节,FPN网络的细节

● YOLOv3和其他的目标检测有研究吗为什么选YOLOv3?这个和其他Fast-RCNN类型的有什么区别SSD和YOLOv3的区别?

● 问检测中能提升速度但鈈损失性能的操作有哪些用过的没用过都行。

● 单阶段的检测方法如YOLO为什么对负样本需求更大

● 数据增强的常用方法,以及项目里用嘚数据增强目标检测中的数据增强?

● 两阶段方法与一阶段方法的对比及其优缺点focal loss的表达式,anchor free方法的优缺点

● 讲一下Focal loss,公式是什么?咜解决了一个什么东西答:难易样本不平衡

再问:如何解决的,和难例挖掘OHEM有什么区别?

● 手写NMS(真的是非常简单的一个题了),我是把官方嘚NMS背下来然后写上去了

● 实现NMS的全过程:包括按score排序(我当时选的归并)IOU的计算,NMS的操作(选出最后的框)

● 实现计算IOU的函数扩展:當bounding box与坐标轴不平行时怎么计算,说出思路

● 目标跟踪里匈牙利的流程?

● 介绍一下Unet为啥要这么设计,好处是什么

● FPN和Unet的上采样用了矗接想加和concat,有什么区别从反向传播的角度来说说

● 基础知识,比如分割的网络有哪些网络是如何优化的等等?

● 语义分割中miou计算公式?

● 了解哪些语义分割

● 我有一个中文的OCR识别模型,现在如何得到一个日文的识别模型

(这里我想说翻译,但是感觉OCR本身就有自己的誤差加上翻译的误差可能会导致准确率很低, 所以我说的是中文训练之后再做迁移但是感觉他想听的是翻译模型。)

● OCR可以在不同的場景下识别出文字但是在我们做AR实景翻译的时候,由于场景很复杂所以识别出来的文字送到翻译模型中的时候就无法确定位置关系

翻譯的时候可能会翻译 离野 这种情况该怎么设计一个解决方案?

● 自己做的超分辨项目有没有什么创新点

● 超分辨今年有什么改进有没看過今年的超分辨paper

● 超分辨率用的什么损失函数?(MSE, RMSE感知损失等)

● 检测到的人脸如何对齐,warpaffine参数转换矩阵M有几维?

● 分类网络训练样夲有噪声(错误标注)怎么办

● 分类网络样本不均衡怎么办

● 分类网络想要分很细的类(比如阿拉斯加和哈士奇)怎么办

● 图像分类一般用什么损夨函数(回答交叉熵) 那说一下交叉熵的形式吧?可以写下来讲一讲怎么来的? 举了逻辑回归中的交叉熵损失然后讲了公式变换以忣对数似然等

● 如果数据集有20%的噪声数据,会有什么影响可以按照上面写的损失函数来想?

● 对图像分类网络的发展历程和进展有了解過吗比如resnet, inception这些

● 姿态估计方向的一些知识,比如openpose的实现过程PAF的原理?

● 姿态估计除了MSE还能用什么loss还讲了些其他相关论文里用到的一些方法,面试官对相关方向很懂问了很多问题?

● Reid里MGN网络的设计为什么有三条支路?将局部特征加入的会有特征冗余为什么还要加叺局部特征?

● Phong模型如果能量不守恒了怎么办

● VVC都了解哪些部分?

● VVC affine AMVP的参数获取流程(讲了构建候选列表利用梯度计算偏移值做运动搜索,cost比常规amvp小再做八个点的小范围搜索)

● 前面说的梯度计算偏移值公式推导背景原理知道吗?

● 运动补偿的差值怎么做的知道吗?

● merge列表构建过程(空域相邻、时域同位块、基于历史、成对平均、零mv)

● 编写代码:PSNR计算函数

● 编写代码:十进制转十六进制函数

3.2 深度学习-RNN遞归神经网络方面

● Bert的输入是什么讲一些细节,你对BERT有什么可以改进的地方

● 说一下Bert的嵌入层,然后就是各种关于Bert的细节问题

● Elmo和Bert嘚区别? Bert细节(多头和缩放)

● Transformer中为什么要除以根号dk为什么能加快收敛速度,为什么加了根号

● 阐述CRF的原理?

● CRF与HMM关系区别?

● 阐述BiLSTM的BP过程为何BiLSTM后接一层CRF会有提升?CRF层自己是怎么实现的

● 神经网络中的word2vec了解么详细讲解一下它们的原理?包括两种训练方式及效率等

● W2V 的原理 两种生成方式,W2V的思想到底是什么为什么要这样做,W2V的缺点W2V中所用的softmax 比起普通softmax有何区别,为什么能减少计算量(我并不是搞自然语言的这一波问的我有点捉襟见肘,只是勉强回答了面试官很好,我没回答清楚地就给我讲引导我)

● Word2vec两种方式,怎么优化负采样

● word2vec如何训练的,细节权值矩阵如何训练

● word2vec原理,如何得到词向量如何分词,分词原理

● 说一下 word2vec,为什么通过对单词预测可鉯学习到单词的 Embedding

● 你能详细的说一下CBOW和skip-garm它们的区别么?分别适用于什么场景

● 千万向量中如何找到和单个向量相似的那个

● 给你一段攵字,如何提取文本特征

答:TF-IDF(解释了一下原理);word2vec;one-hot;(其实GLOVE ELMO这些也可以讲一讲不过一时间没想起来)

● 现在最火的NLP模型是啥(项目Φ用了BERT, 然后上个月的XLNet目测效果更好)

● TF-IDF分别表示什么及公式

● 知识图谱学习得到的Graph Embedding是用于召回还是排序(召回)(1.有噪声;2.因为对于傳统观点的召回来说,精准并不是最重要的目标找出和用户兴趣有一定程度相关性但是又具备泛化性能的物品是召回侧的重点,所以可能知识图谱的模式更适合将知识图谱放在召回侧)

● 讲一下NLP中常用的损失函数?

● 项目里有CTCLoss问了一下CTC loss有什么用,不用CTC的话怎么办

● 介绍一下什么是GAN?GAN用来干啥的,是怎么训练的?

● GAN是怎么训练生成器、判决器的(楼主就说了最原始的GAN的交替训练的方法)

● 因为项目中用箌了强化学习DDPG,介绍了ddpg的原理训练细节等

● 介绍GAN中的生成器和判别器

● 通常GAN有不收敛、模式崩溃的问题。怎么让GAN更稳定更好不收敛的原因分析:在最优解附近震荡,需要约束梯度

WGAN的地球移动距离衡量数据分布差异

零中心梯度惩罚。权重的L2正则化

权重平滑移动(EMA)

均衡學习率。权重归一化

● 主要介绍了实习项目基于GAN做图像补全的项目:包括网络结构、损失函数、实际效果、指标

● 介绍强化学习的项目(背景、动机、如何建模、输入输出和训练算法说了一遍,说完后面试官问了一些细节)

● 我实习中有用过GAN生成人脸所以问我:GAN的损失函数形式是什么样的?(楼主写出来了不过忘了写前面的min、max目标,面试官表示没关系知道我是懂的就行了)

● GAN的损失函数形式是什么樣的?

● 强化学习PG的推导

● 新闻推荐如果用强化学习怎么设计。

● 有木有试过StarGAN之外的方法

● 文字生成可以用除了GAN其他的吗(说了说RNN,泹是感觉NLP这边很多自然语言模型都可以做文本生成啊根据模型调整输出层?)

● 问在用StarGAN合成人脸表情的时候训练有没有遇到什么困难(額感觉面试官都好喜欢问GAN方向的问题)

● 讲述一下FFM和FM之后问了如何处理特征?

● FM了解么具体怎么做的,怎么解决权重系数难训练的问題梯度怎么更新的 ?

● DeepFM了解么embedding层是怎么训练的,结构是什么样的比赛的DeepFM是自己写的么(用的DeepCTR) ?

● 做用户商品交互特征的时候你知道业界是怎么做的?扯了一下DIN模型的和目标商品的attention做法?

● 了解Deep 模型吗说了deepFM,手写deepFM的结构(代码)

● 推荐系统模型收敛的很好但是多樣性可能不好的情况下如何解决

● 搜索引擎算法:搜索引擎的流程是什么样的(不太会,只说了query分析然后匹配doc)

4 数据结构与算法分析相關知识点

4.1 数据结构与算法分析

● 排序数组中绝对值不同的个数

● 手撕代码,1.给定一个数组前面一部分已经排好序,后面一部分也排好序将整个数组排序

● 数组前半部分和后半部分有序,然后(用的归并)

● S1, S2两个整数数组已经从大到小排序。 输出最大的K个数, 时间复杂度: 通过k/2嘚思想直到把k为到1为止。

● 给定一个数组找出数组的最长连续子序列。例:3,3,4,7,5,6,8最长的连续子序列(这里的连续是说连续整数,整个子序列是连续整数我一开始题都没看明白)应该是(3,4,5,6),需要返回它们的下标(1,2,4,5)如果存在多种答案,只需给出任意一组下标面试官看我不会,让我先写一个暴力的方法我还是不会啊,然后一个小时过完了凉凉。

● n*n的二维数组求最长上升序列,每个位置都可以上下左右走

问复杂度是多少,我说n四次方

问怎么优化用缓存保存dfs过的值,减少重复递归

● 求无序数组的不连续递增子序列?

● 给定2个数组一個数组是PID ,里面存的进程号一个数组是PPID 代表着PID对应位置进程的父进程号。然后删除一个进程问因为这个进程被删除,而牵连都被删除嘚进程号打印出来

其实就是个简单的DFS,建立一个graph然后dfs直接输出即可。

● 有一个长度为n的数组求一个数k,k的取值区间为[1, n-1]使得数组的湔k个数和后n-k个数的方差和最小。

要求化简方差公式达到计算子序列方差的时间复杂度为O(n)。化简后要求空间复杂度为常数级别

● 将一个數分成给定的一些数的组合,给出所有这样的组合比如将10 分成[1,2,3],其中一种为[1,1,1,1,1,1,1,1,1,1]

● 给你一个数组,[1 2 3 5 5 3 ],每次可以溢出连续的重复数字移除后得到嘚分数为连续数字的长度的平方,求让数组全为空时获得的最大分数

第二次移除3 3 得到1 2 ,得到分数是2*2

第三次第四次分别移除1和2最后得到嘚总分数为2*2+2*2+1+1

第一反应是区间dp,每次遇到连续的重复数字就dp求一次,取最大但是没考虑2 1 1 1 3 1 1 ,去除3 后又变连续的情况到最后也没调出来

● 给一個无序数组,找到其中位数(快排O(n)),问时间复杂度

● 给定无序的数组,求出连续相邻的子数组中最小值乘以长度使得值最大的连續数组?

● 给一个无序数组输出最小的不在数组中的正数

● 非递减数组中查询某个目标值出现个数。解法:二分查找左右边界

先看是否扭转,没有扭转用普通的二分做否则用二分查找查找出扭转点, 然后看要查询的keykeykey在哪一边 再二分查找就行。

● 数组中元素两两成对除了一个元素只出现一次,找出该元素异或有交换律吗?

● 数组中元素两两成对除了两个个元素只出现一次,找出这两个元素

● 兩个有序数组的中位数?

● [2,3,4,6,2,3],找出数组中每个数字的后边比它大的第一个数

● 输出数组中位数,第k个元素为前k个数的中位数

● 连续数组,给定k求连续数组最小区间。

● 空间上如何优化:滚动数组

● 一维01数组中求最长的区间,其中0和1数量相等

● 一个非负数组,求出和為m的最长连续子序列的长度

● 编程题:给定一个数组数组长度为n,数组所有元素x满足:0<x<=n<=1000。求数组中出现次数最多的元素若多个元素出现佽数相同,输出元素值较大的要求时间复杂度O(n),空间O(1)。

● 给一个数组求其所有数都平方后,共有多少个唯一的值

● 数组的全排列(空間复杂度O(1))

● 判断是否存在个数超过数组长度一半的数

● 给一个数组,长度是N里面的大小也是0~N,用O(n)的时间O(1)的空间复杂度统计里媔数字的个数?

● 旋转数组查找一个二维DP

● 旋转数组中搜索某个目标值

● 查找一个有序数组旋转后中有无key值。

● 单调不减数组找出一个數最后出现的位置(二分变形)

● 两个排好序的数组找中位数。这个题如果复杂度O(n)就没意义了显然是要求写O(log n)的二分查找

● 整数数组找兩个相加为k的两个数,先写了扫一遍数组用map存扫描过的元素她说你这个空间复杂度高,能不能换一个后来又写个排序后用双指针的版夲。

● 给定数组返回任意满足(当前数大于左右两个数)要求时间小于O(n) ,开始想返回随机数面试官提示小于O(n)就是logn 就是二分

● K个有序数組,找一个长度最小的区间在这个区间里至少包含每个数组各一个数。

分析:初始化带下为K的最小堆K个数字是每个数组中的最小值,設置变量max记录k个数字中的最大值删除堆顶元素,将原堆顶元素对应的数组中下一个元素加入到堆中调整堆,并且记录当前区间范围为(max-min)重复执行直到某个数组所有值都被删除。

● 问怎么实现一个字符串中找最小的包含所有不同字符的子串回答用双指针,让证明双指针的正确性

● 长度为n的数组中有一个数字出现了n/2次,快速找到这个数

● 输入一个二维数组和一个一维数组例如

输出[1,2,3]在二维数组中的位置

直接遍历,然后代码行云流水的写出然后问我时间复杂度。

● 给定两个unordered数组数组中每个元素都包含一个int和一个bool,bool表示这个int数值是否應该被delete,每个元素的值可能会出现多次和不同的状态,将2个数组合并成一个

要求:merged后返回一个数组每个元素智能出现一次

不能包含曾經被delete过的元素,这道题我用hashmap做的做出来分析时间复杂度

● 从n个数字的数组中任取m个为一个组合,返回所有组合顺序不一样的算一个组匼(递归遍历+回溯)

● 给出一个数组,数组中有正数和负数要求重新排列这个数组,使得原始数组中的正负数交替排列且保证各自的楿对顺序不变。

● 二维数组逆时针螺旋打印

● 给定一个数组找到这个数组中,和等于0的所有三元组 我说我只能想到n^2logn复杂度的,在面试官提醒下写了依然没提交,大概思路对就过了

● 一个正整数数组寻找连续区间使得和等于target,简单的用两个指针做出来了不过让我证奣一下解法的正确性,纠结了一会儿也算是证明出来了然后如果里面有负数怎么做?

● 数组连续元素最大值的和动态规划解决

● 求和為k的子数组个数

● 两个有序数组求交集

● 两个数组自身元素一样,各自内部的元素不能比较实现两个数组的排序

● 一个数组,一个数出現一次其他数出现两次,求出现一次的那个数

● 一个数组,两个数出现一次其他数出现两次,求那两个数

● 双指针:比较 i,ja[i]==a[j] ,j++;不等就交换i+1和j然后j++,最后返回有效长度

● 长度为n的字符串中包含m个不同的字符,找出包含这m个不同字符的最小子串

● 如果用数组實现,数组初始容量为n每次push到容量上限之后都扩容到原来的两倍,现在push进去m个数m远大于n,求相比于m的时间复杂度

● 给定一个数组返囙每个对应位置右边第一个比他大的数,没有就是-1如【4,12,58】返回【5,25,8-1】

● 递归和迭代的反转链表

● 链表反转,二叉树中序遍历递归+非递归

● 二叉树转双向链表(中序非递归遍历修改指针)

● 删除链表A中出现在链表B的元素

● 删除倒数第k个节点

● 如何用链表实現一个栈,O(1)获取最小值get_min、如何节省空间,存放最小值如果有多个,不想多次存放

● 有两个数字用链表表示,如第一个数123的链表是1-2-3苐二个数4123的链表表示是4-1-2-3,输出两个数求和后的链表表示

● 求两个链表的第一个公共结点。

● 如何判断两个单链表是否相交并找到交点這个题没反应过来,所以答得并不好只大概给了个思路。用两个队列实现栈的入栈和出栈操作

● k个有序链表合并,问时间复杂度

● 一個链表奇数下标递增,偶数下标递减排序使其总体递增。

● 已知单链表要求奇数位置降序,偶数位置升序说下思路,再写代码

● 栈和堆的原理和区别?

● 两个栈模拟一个队列

● 给定栈保证栈的效率的同时能够在O(1)返回栈的最大值

● 将一个字符串通过 增、删、改 三種操作得到另一个字符串的最少操作,我当时选的动态规划

● 有两个字符串,你只可以进行删除操作问最少进行多少次操作可以使两個字符串相等?

例:seaeat需要两次删除操作

A:这个简单,思路就是用动态规划求两个字符串的最大公共字串的长度然后使用每一个字符串嘚长度减去公共子字符串的长度。

Q:那咱们再加一点如果我想要知道每个字符串需要删除的字符是那些呢?

A:那我们就需要求出最大公囲字串具体是由什么字符构成的思路也是动态规划。(很快就写完了)

Q:好的那你有什么想要问我的么?

● 字符串最小编辑路径

● 字符串轉数字及边界条件

● 删除字符串中连续的重复字符

● 1,2...,N中字符1出现的次数?

● 给定字符串求最大不重复子串长度

● 两个字符串,求最短编辑次数使相等

● 给一个字符串列出所有可能的ip组合

● 给出字符串x,和字符集合y求x中包含所有y中元素的最短字串?

● 我们输叺两个值n和kn表示我们有从1到n个整数,然后将这些整数都字符串化之后按字典排序找出其中第K大的。例如:n=15,k=5.那么1-15字符串化之后排序如下:1,10,11,12,13,14,15,2,3,4,5,6,7,8,9其中第5大的就为13。

● 给定一个字符串S[0...N-1],要求把S的前K个字符移动到S的尾部比如字符串"abcdef",前面两个字符 'a' 'b'移动到字符串的尾部得到新字符串"cdefab",即字符串循环左移K要求:时间复杂度O(n),空间复杂度

我给出了一种非常naiive的做法。就是调用两次随机数生成器变成1 - 25的数。1-21每3个对应1-7里面嘚一个数 剩下4个重来。

● 判断输入字符串开始或者结尾是否包含非法字符串(前缀树)

● 给定一个n*n的字符盘和一个字符串,看改字符串是否出现在字符盘中

● 有一个字符串,判断QWER出现次数是否相同如果次数不相同,如何修改可以让他们相同

● 设计一个可动态扩展的字苻串类,尽可能降低占用空间和时间复杂度

● 字符串的全排列,问了时间复杂度(O(n*n!))以及详细的时间复杂度推导(n是怎么来的,n!是怎么来的)怎么优化(DFS剪枝)。

● 列表数字排列可组成的最大数字

● 构建哈夫曼树:本身不了解哈夫曼树,但是了解哈夫曼编碼的一些思想讲出来后,小哥哥引导着思路然后我写出了代码。代码本身还有优化空间但是小哥哥也说通过了。

● 子路径和为k的路徑个数

● 给一个类似树的结构每个节点都可以有多个节点(不止两个树)然后每个根节点和字节点间的路径不一样,求叶子结点到叶子結点的最大路径

● 两个树节点的最近公共祖先节点?时间复杂度

● 给定一颗二叉数,每两个结点路径为1求相隔最远的两个结点的距離

● 给出的层次遍历和先序遍历,求的后序遍历

● 求两棵最大公共子结构的节点数目

答:节点是红色或者黑色的红色节点的子节点必须昰黑色的,根节点为黑色叶子节点(Nil节点)为黑色的,根节点到叶子节点的路径上的黑色节点一样多

● 加问为什么要使用不同颜色的點?

答:红黑树是平衡二叉树的变形由于平衡二叉树插入删除操作复杂特别是如果插入有序的数字时,二红黑树只要满足节点的颜色要求在插入删除过程中满足红黑树定义要求,就能满足二叉树的相对平衡

● 红黑树和AVL的区别?

● 二叉树最大深度地图中找出大陆的个數(一道BFS题)

● 二叉树最远节点距离

● 给定一个二叉树,求出这个二叉树的宽度和高度

● 什么是平衡二叉树平衡二叉树的应用都有哪些?

● 判断是否是二叉平衡树

● 二叉树前序中序遍历,重建二叉树

● 非递归中序遍历二叉树

● 二叉搜索树已知先序求后序(代码实现)

● 二叉樹之字型遍历每行打印

● 打印二叉树中最左边节点

● 一个二叉树的所有右叶子结点之和

● 判断给定序列是否为二叉搜索树的前序遍历

● 給N个数字,返回这N个数字能组成的所有二叉搜索树

● 二叉树输出给定节点到目标节点的路径寻找两个字符串中只有首尾字符相同的所有孓串?例如 ABCDE 和 ADCAE中包含(ABC--ADC)以及(CDE--CAE)

● 给一个二叉树输出所有完全一样的(重复的)子树。 要求O(N)(code)

● 设计一个数据库的表来存储树形结构(不一定是二叉树)要求(1)输入父节点返回所有子节点(2)输入某节点返回所有兄弟节点

● 判断二叉树上是否存在一条从根结點到叶结点的路径,满足其上的元素之和等于target

问能否在这个字符串中找到最长的连续子串,使得这个子串由上面m个字符组成

● 给你一個二叉查找树,还有一个数K如果能找到,就返回节点如果找不到,就返回空

● 最小K堆,只写伪代码就行

● 找出一颗完全二叉树最后┅个节点时间复杂度要求 logN的平方

● 有M个有序链表(从大到小)。现在我们要取出前K大的元素

A:(这个我见过,内心美滋滋)我们应该紦M个链表的头节点做成一个大小为M的最大堆每次取出堆中最大的节点,然后将这个节点的后序节点放进来重新对堆进行排序。

Q:好的那这个算法的时间复杂度和空间复杂度是多少呢

Q:那建立这个堆的时候时间复杂度是多少?

● 线段树和树状数组的异同

● 无向无环图Φ,最短路径的最大值(O(n^3)的解法)这里考察的其实就是Floyd算法。

● 说几个常用排序算法的时间复杂度、空间复杂度、稳定性

● 说一下所有嘚排序方法,并给出他们的时间复杂度

● 为什么归并排序、快速排序和堆排序都是o(nlogn)的时间复杂度,大家都习惯用快速排序归并排序和堆排序差在哪?

● 希尔排序知道吗为什么这么操作?

答:改良的插入排序插入排序在数组基本有序的时候可大大降低时间复杂度,希尔排序通过将数组分块后对每块数组进行插入排序每次排序完成,块数减少一倍数组也相对变得有序,知道最后对整个数组进行插入排序则排序完成。

● 快速排序和归并排序描述一下优缺点(描述)

答:快速排序:先选定一个基准元素,按照这个基准元素将数組划分再在被划分的数组上重复上过程,最后可以得到排序结果

归并排序:将数组不断细分成最小的单位,然后每个单位分别排序排序完以后合并,重复这个过程就得到了排序结果

优缺点:归并排序稳定且最高最低时间复杂度都是nlogn,但是占用额外空间;不稳定最高时间复杂度n2,最低时间复杂度nlgn不占用额外空间。

● 快速排序很多重复数字如何优化

答:返回基准元素位置时返回基准元素的最左和最囿索引减少排序次数。

output:求大小相邻两个数之间的最大差

排序可以o(nlogn)解决,然后问我怎么优化?

● 找第K大的数(快排)

● 一亿个浮点数夶小不超过2^32,均匀分布在值域内求最快的排序方法;分析排序方法的复杂度。

● 有两个数列将两个数列排序,但是自己数列里面的数芓不能和自己数列里面的相比较(快速排序变种)

● 海量数据TopK问题一般这种问题都是用哈希表分治+堆排序,但是当时不会所以挂了。

● 求矩阵中连通域的个数用bfs或dfs做,很简单先说思路,然后用自己喜欢的语言做

● 二维数组找最长递增路径很简单的题,DFS即可

● 寻找洣宫中的最短路径迷宫中1表示有墙,路不通0表示可以走。我脑子不知道怎么抽了直接想用DFS来解,给面试官讲了一下思路面试官提醒我,DFS和BFS你是怎么考虑用哪个的然后我就明白了,应该用BFS讲了一下BFS和DFS适用的场景。然后用BFS比较顺利的写出了程序

4.2 算法思想实战及智仂题

● 岛计数问题 dfs

● 两堆钞票,尽可能均分(利用背包问题的思想)

● 著名的 小兔的棋盘我后来查了一下,是什么卡特兰数然而面试嘚时候我没听说过这一道题,不过还是磕磕绊绊地用DFS解出来了面试官说可以了,也没让我继续用DP来解哎,算法还是有点菜的

● 给一個表只有id和时间,如何估算平均访问时长 【撕代码】

● 从用户的访问日志中选出访问次数最多的topK的用户

因为是实际应用,所以我会想到對数据进行预处理比如对同一用户在同一分钟内(时间阈值可以自己设定)的多条相同访问日志就保留一条的情况,因为会有因为网络異常或者服务器异常的情况所以对于用户来说真实的访问记录应该是一条记录。 第二步在用快速排序的思想实现

小明需要踩着石头过河下一步只能到达距离为3、4、5石头。

给一个数组里面是n个石头,以及石头到岸边的距离

假设从小到大排序,问能否到达对岸(到达第n塊石头)

我的方法:用深搜+剪枝的递归实现。复杂度O(n)

● 给定一个词典词典里是分好的词,再给定一串文本找到所有可能的分词序列。我用的dfs优化问题整了我好久。

● 棋盘上的连通棋子团数(最基本的dfs)

● 经典的接雨水问题然后问能不能空间优化?进一步提问再給你k个格子,你可以随意安防他们问安放后最多能接多少雨水?

● 假设现在你全中国的一亿个商家的位置信息现在输入一个坐标x,y找絀距离你最近的k个商家收一下思路,写一下代码

● 小机器人从左下角走到右上角,只能向上或者向右有多少种走法?

● 如果把一次拐弯当做k现在传入一个参数k,问在k次转弯下有多少种走法?

● 给一个数组,进行两次股票交易最大收益是多少?

● 给定k和nA和B先后从1-kの间挑出一个数,不可以重复挑然后每次挑出来都加在一起,当当前的和大于等于n时当前选手获胜,求给定k和n时A先手是否能赢(假設两个人每次都是最优策略)

● 一个无序数组,数字代表挡板的高度挡板没有厚度最多可以盛多少水,如[3, 1, 2] 输出:4

● 在一片草原上有1只羊和若干只狼狼可以吃羊或不吃羊,但狼吃羊后会变成羊从而被其它狼吃掉,已知羊不能被两只或以上的狼分着吃掉并且每一只狼都会先保证自己不被吃掉,而在此前提下每一只狼又都想吃到羊那么羊是否会被吃掉?

● 43个石头A,B轮流拿,每次可以拿1~3个A先拿能否保证自巳获胜?

● 1000盏灯开着1000个人标号1~1000依次进入,每个人进去按一下自己标号倍数的开关问最后哪些灯亮着?

● 一个人初始体力为m起始点为0,终点为n一路上有毒蘑菇和体力蘑菇,用v_i表示吃了会有体力的增加或减少,走多少步就消耗多少体力问这个人能否到达终点,如果能最小体力是多少。

● 我手中有一堆扑克牌 但是观众不知道它的顺序。

第一步 我从牌顶拿出一张牌, 放到桌子上

第二步, 我从牌頂再拿一张牌 放在手上牌的底部。

第三步 重复第一/二步的操作, 直到我手中所有的牌都放到了桌子上

最后, 观众可以看到桌子上牌嘚顺序是:13\12\11\10\9\8\7\6\5\4\3\2\1 请问 我刚开始拿在手里的牌的顺序是什么?

● 求股票的最大利润例如[1, 3, 1, 8, 10, 3],只能买卖一次计算最大收益

能买卖无数次,计算朂大收益

只能买卖两次计算最大收益

● 十个红球十个白球,无放回抽出10个然后红球互不相邻的可能性没想好,不过具体思想就是一红┅白相间地摆好先然后再在白球红球之间插入白球,面试官说时间关系就先这样了但是很接近了。

● A和B比赛A、B获胜的概率分别是0.6、0.4,如果你是A3局2胜和5局3胜你会选择哪个。

● n个人之间存在m个关系对关系具有传递性,假如A关注BB关注C,那么A就间接关注了C如果一个人被除他之外的所有人都直接或间接关注,那么这个人就是抖音红人求抖音红人的总数。

● 25匹马赛跑5个跑道,怎么以最少的比赛次数来決出最快的3匹(思路分析)

● 三扇门问题三个门里其中一个有宝石,刚开始你选了一个门然后主持人开了一个没有宝石的门,问你要不要換给出具体求解方法。

● 一个岛上有若干人每个人都戴一顶帽子,不是绿帽子就是白帽子每个人看不见自己的帽子颜色,可以看见別人的帽子颜色不能交流。现在知道至少有一顶绿帽子

● 一个人确定知道自己帽子颜色的时候就会离开,请问岛上会发生什么

● 求幾何分布的期望?

● 泰勒公式用泰勒公式实现e的计算求值?

● x,y属于[0,1]的均匀分布求max(x,y)的期望?

● 丢硬币连续丢出2次正面才停止,求丟硬币次数的期望

● 一辆巴士载了25人,路经10个车站每个乘客以相同的概率在各个车站下车。如果某个车站有乘客要下车则大巴在该站停车。每个乘客下车的行为是独立的记大巴停车次数为X,求X的数学期望(要求通过编程求数学期望)

● 定义域值域都是正整数的单調递增函数f,给一个值y找到使|f(x)-y|最小的x。

(肯定是二分但其实有很多细节值得注意。如定义域值域都是正整数所以可以推出f(x)是不鈳能小于x的,应该是x^n的形式所以开始搜索的范围就是ed=y)。

● 给一个中文数字比如一百二十,如何转换为整形数字

● 由长度为length的array表示的整数允许相邻位数交换,求n步交换内能得到的最小整数

● 把只包含质因子2、3和5的数称作例如6、8都是,但14不是因为它包含质因子7。 习慣上我们把1当做是第一个求按从小到大的顺序的第N个。

● 从K个整数中组合出能被3整除的最大数,例如: [1, 2, 3]组合出能最大能被3整除的数是321

● 一个图片中心逆时针旋转30度后,求最小外接矩形长和宽说一下有哪些解决方法?

第一种初中数学几何知识;第二种,求解仿射变换矩阵(2x3)然后和原图相乘,就得到变换后的图片也就知道了最小外接矩形的长和宽。

● 现在有一堆点求一个点到每个点的距离之和朂小,证明这个点是质心

● 给一个01二项分布的随机器,参数为p用它设计一个0-1的均匀分布的随机器(连续的)

● 已知x.y的概率分布,求max x,y的汾布

● 一个圆上随机三点,求形成锐角三角形概率要求数学推导

● 现在我有抛一枚硬币,正面朝上的概率是p,反面是1-p那么第k次抛的时候出现第一次正面的概率是多少?

● 抛2k+1次硬币,问正面次数比背面多的概率是多大并讲出数学证明思路。

● 3种颜色砖块单位长宽,铺满單位宽长m的地板有多少种铺法?

● A、B交替抛硬币正面概率为1/2,谁先抛到正面谁胜问A先抛并获胜的概率

● 13个人生日都不是同一天的概率,要求给出表达式和最终结果(不用计算器估算)

● 给你一个圆让你在上面画三角形,要求三个顶点在圆周上问画的三角形是锐角彡角形的概率是多少。怎么求解

● 2 个人玩游戏,每局获胜的概率都是 50%A 赢 3 次胜利,B 赢 2 次胜利求 A B 的获胜概率(就是一个状态转移问题,畫了图秒掉)

● 斗地主农民拿到炸弹的概率是多少,听到这个题都蒙了完全不知道怎么解,面试官也说他自己都不知道答案然后就茬面试官的一次次提问下写了个大概思路

● 一条线段分成三段能够组成三角形的概率,这个题目碰到过不过当时没想起来,面试官提示叻下解答出来了

● 抛一个不均匀硬币五次两次正三次反,下一次正的概率p1是多少

● 抛一个不均匀硬币五十次,二十次正三十次反下┅次正的概率p2是多少?

● 一道数学题A、B两人投硬币,谁先投到正面谁就赢求先投的人赢的概率

● 问:我们来讨论一个下雨的问题

今天丅雨的概率是0.2,天气预报的准确率是0.8. 问已知今天下雨天气预报预测下雨的概率?

● 在[a,b]之间a,b为正整数问其中不包含数字3,57数字的個数;

● 一个硬币,正面向上是p投2k+1次,正面比反面多的概率写出表达式

● 真硬币m个,假币n个假币只有正面。真币投掷正面概率为p其中某硬币投掷k次都是正面,求它为真币概率

● 斗地主中一个农民抓到王炸的概率

● 一分钟看到红车的概率是0.2,一个小时看到1辆红车的概率是多少

● N个相同的球取其中M个(M<N),如何保证每个球取的概率一致

我答了有放回取样,已取样的做标记若再次取到有标记的则放囙重新取,直到取得M个

考官让算一下,这么做的期望复杂度是多大没算出来。

● 如果是头条的用户场景每天用户总数量是不确定的,但是要抽M人如何保证概率一致。

考官提示:如果已经有一个函数使N-1个人中等概率抽取了M-1个人,那么下一个人加入的时候如何保证等概率

在这个提示下我想到了需要列式使新加入进来的人概率和前一个人上一次中的概率和这一次的概率之和是一致的,以此类推其实┅下子还是没有写出完整表达式,因为时间比较捉急了我直接用N个人抽N-1个的特殊情况写了递推式,表示取M个的话需要进行变形考官应該是认为我已经理解了思路,所以结束了这个问题

总结:保持和考官的交流,有思路及时沟通一下写不出答案可以先考虑特化情况。

● 一个概率问题每个人投票给a概率51%,每个人投票给b概率49%问投票人数和a最终获得更多票数之间的关系

● 概率题:飞机上有100个座位,有100个塖客准备登机每个乘客按顺序上飞机,但是第一个乘客喝醉了随机挑了一个座位来坐。每个乘客的选座位规则:1)如果自己的座位没被坐则坐自己的位置;2)如果自己的座位被坐了,则从剩下的座位中随机选一个来坐则第100个人能做到自己座位的概率是?

● 甲乙射击仳赛单局甲胜率0.6,3局2胜和5局3胜两种赛制甲如何选择

● 网游中杀死小怪时候,有P=0.2的概率掉落一把宝剑野猪的死亡是独立事件,某玩家殺了10个小怪求掉落4把宝剑的概率?

● 你有1000瓶饮料其中有1瓶有毒,你有许多老鼠老鼠喝完饮料之后24小时会死,请问你平均需要多少天找出这个有毒的饮料需要多少老鼠?

● 你有1000法力值有4个技能,技能伤害值与消耗魔法值成正比请问你怎样用技能,才能做到伤害输絀最大

● 打怪有80%概率掉落a装备,20%概率掉落B装备请问一个人平均要打几次怪,才可以凑齐ab装备

● 人群中男人色盲的概率为5%,女人为0.25%從男女人数相等的人群中随机选一人,恰好是色盲求此人是男人的概率。

● 甲扔n次骰子取其中最大的点数作为它的最终点数,乙扔一佽骰子得到点数求乙的点数大于甲的概率。

● 某种病的发病率为1/100某种检测该病的技术检测正确率为99/100,现有一人被检测到生病的概率为p求他真实生病的概率是多少?

在上一问的基础上现在连续两次检测为有病才会停止检测,求检测次数的期望值

● 10个人里每个人在10分鍾内的任何一个分钟到达的概率是均匀分布的,问所有人都到达的时刻在几分钟时概率最大

● 问比赛甲获胜概率0.6,乙获胜概率0.4该选三局两胜还是五局三胜。再问不通过计算怎么判断当n为一个趋近于无穷大的奇数时,甲乙获胜概率如何

● 斗地主有人拿到2张王的概率

● 巳知1-5的随机数发生器,怎么生成1-7的随机数发生器

● 假定一个人胜的概率是p判断五局三胜有利还是七局四胜有利

● 有100个乘客,每个乘客手裏有一张座位票座位是1到100标号。正常情况下应该对号入座但是第一个乘客喝醉了,他没坐在1号位置而是从其他99个座位随机选了一个座位。从第二个乘客开始如果他的座位没有被前面的人占领,他就对号入座如果被前面的人占了,他就在剩下的座位里随机选一个問第100个人正确坐到自己座位上的概率是多少?

● 一个圆问走n步回到原点多少种方法?

● 10个球放到12个盒子里 空盒子=5的概率P=? 用代码模拟10000次的概率是多少

● 10个小球,随机分到12个盒子里求恰好10个盒子都为空的概率。要求用Python程序模拟十万次暴力求出该概率。

● 给定N种不同颜色嘚球以及每种颜色的球的数量把它们放进一个容器里面,随机抓取要求写程序实现该功能,并且要按照每种颜色球的概率返回对应的浗的编号

● 比如,有A, B, C 3种颜色的球数量分别是1,23。然后把它们统一放入盒子里随机抓取(使用random随机生成(0, 1)之间的小数),要求按照它們各自的频数返回对应的颜色的球

● 有两张表,第一张表有n个专有名词比如今日头条、抖音等,第二张表有m条query比如今日头条是怎样嘚应用、有多少人喜欢刷抖音等,如何统计表1中所有名词在表2中出现的频次

● 有一个生成 0-4的均匀分布的整数随机数生成函数,利用这个函数生成0-9均匀分布的整数随机数生成函数

● n个[0,n)的数,求每个数的出现次数(不能开辟额外空间)

● 有一个0-1的均匀分布随机器用它实现┅个N(0, 1)的正太分布随机器?

● 一根木棍, 随机切成三段, 求能围成三角形的概率?

● 三个盒子分别放的球为:“红 红”“红 蓝”, “蓝 蓝”第┅次取出一个红球后,取出两个红球且为第一个盒子的概率

● 给一个现成的生成器,可以以概率p生成1概率1-p生成0,让我用这个生成器构慥一个新的生成器满足每次均匀返回0-1之间的一个浮点数?

● 二维矩阵求连通区域数量(连通的定义: 两个像素是四邻接的邻居,并且潒素值的差的绝对值小于等于16那么这两个像素是连通的)。

● 蛇形打印n*n的矩阵

● 给出一个数字矩阵寻找一条最长上升路径,每个位置呮能向上下左右四个位置移动

● m*n矩阵从左上角走到右下角一共有多少种走法?如果有障碍物的话怎么求求最大的路径和?先从左上到祐下在从右下返回到左上重复走的节点值为0,求两条路径加和最大值(都是DP)-问时间复杂度

● 矩阵的转置和回旋输出

● 写个矩阵乘法,不让用numpy再优化下

● 由0和1组成的二维矩阵,找出1的最大连通域计算其面积。

● 矩阵TopK问题先说思路,思路不对、复杂度太高的话就不鼡写了

● 一个二维矩阵由小到大排列,找target数字

● 给定一个矩阵里面只包含0和1两种数字,给出每个单元距离最近的0的距离上下左右都算作相邻,相邻的距离为1

● 有序矩阵中第k小个元素

● 三数之和 = target 找出所有可能三元组

● 一个无序数字序列,每次只能左旋操作3个数求要求有序下,证明能否通过有限次数能否有序

● 如何判断一个算法是线性的还是非线性的?

● 中位数与平均数什么时候会相等貌似是数據分布对称就行?

● 手撕代码开根号,以前没遇到过这个问题于是写了二分查找。面试官问会不会牛顿法现场推了下公式,结果牛頓法太久不用公式都忘了用泰勒展开推了一下写成了拟牛顿法

● 分解质因数【撕代码】

● 输出幂集(比较简单,给了两种方法迅速的過了)

● 给出 6 * n 的方块,用 1 * 2 或者 2 * 1 的方块覆盖它不要求求出具体的个数,证明该方法时多项式级数还是指数级数

● Leetcode 224:hard,实现一个基本的计算器来计算一个简单的表达式字符串表达式字符串只包含非负整数、+, -, *, /操作符。可以假设给定的表达式总是有效的

● Leetcode 284:一个类A有next,has_next两个方法其中next调用会返回值,但索引会自增实现一个peek访问只返回值,索引不自增

● Leetcode958:判断一棵树是不是完全二叉树

● Leetcode原题:链表采样,resevior sampling要求在一个无限长的单向链表中采样,当遍历的节点数量充分多时每个节点被采样到的概率应相等。

● Leetcode原题:正则表达式匹配

● Leetcode原题:求数x的开方精确到小数点后一位

● Leetcode原题:01 矩阵找最大子矩阵大小

● Leetcode原题:n的平方根,精度十位小数

● Leetcode原题:数据流中按照某个窗口夶小,找窗口中的最大值

● Leetcode原题:最长回文子串

● Leetcode原题:一个字符串一个单词字典,把字符串分成若干个子串每个子串都包含在字典Φ,返回多少种分割法

● 剑指offer 41:数据流中的中位数,设计一个数据结构有插入和删除操作,并且能随时得到数据中的中位数

}

2.通过模式器对象创建匹配器对象 指定为字符串的正则表达式必须首先被编译为此类的实例 然后,可将得到的模式用于创建 Matcher 对象依照正则表达式,该对象可以与任意字苻序列匹配 尝试查找与该模式匹配的输入序列的下一个子序列。 返回由以前匹配操作所匹配的输入子序列 一定要先使用find()方法先找到 才能鼡group()方法获取出来

需求:获取下面这个字符串中由三个字符组成的单词
Math 类包含用于执行基本数学运算的方法如初等指数、对数、平方根和彡角函数。
A:概述:用来生成随机数
 public Random() 没有给定种子,使用的是默认的(当前系统的毫秒值)
 
System 类包含一些有用的类字段和方法它不能被实例化。他里媔的成员变量和成员方法都是static修饰的使用类名调用 public static final InputStream in“标准”输入流。此流已打开并准备提供输入数据通常,此流对应于键盘输入 public static final PrintStream out“标准”输出流此流已打开并准备接受输出数据。通常此流对应于显示器输出 获取指定的环境变量值。 由于在运算的时候float类型和double很容易丟失精度 比如银行方面对数字的精确表示有严格的要求 所以,为了能精确的表示、计算浮点数Java提供了BigDecimal 如果能整除的话,直接除就行,如果不能整除,需要声明保留小数点后几位,不然会报异常 第一参数表示除数,第二个参数表示小数点后保留位数第三个参数表示取舍规则。 所以當我们用三参数的除法方法时规定了保留几位小数以及你的保留方式,就可以避免异常 Date类:表示特定的瞬间,精确到毫秒 月份由从 0 至 11 的整数表示;0 是一月、1 是二月等等;因此 11 是十二月 日期(一月中的某天)按通常方式由整数 1 至 31 表示。 public Date() 创建一个代表系统当前日期的Date对象,精确到毫秒
使用@Deprecated注解标识的表示已过时了,不推荐使用,Date类里有大量方法已过时
Date类打印的日期格式为西方格式,我们可以通过一个格式日期的类SimpleDateFormat把日期变成我们想要的格式
SimpleDateFormat: 可以把一个日期对象格式化成一个文本(字符串) , 也可以把一个日期字符串解析成一个日期对象
 
 
 
 
 

案例:计算你已经出生了哆少天


 
 
 
Calendar 类是一个抽象类,不能直接new对象可以通过他的一个静态成员方法getInstance()来获取他的对象,Calendar 用来替代Date类中的一些过时的方法 等日历字段之间嘚转换提供了一些方法,并为操作日历字段(例如获得下星期的日期)提供了一些方法 根据日历的规则,为给定的日历字段添加或减去指定的时间量 根据日历的规则为给定的日历字段添加或减去指定的时间量

键盘录入任意一个年份,获取任意一年的二月有多少天

如果我們要使用超出long范围的数,就要使用BigInteger这个类
}

我要回帖

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信