首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
AI 模拟面试
简历
求职
学习
基础学习课
实战项目课
求职辅导课
专栏&文章
竞赛
我要招人
发布职位
发布职位、邀约牛人
更多企业解决方案
AI面试、笔试、校招、雇品
HR免费试用AI面试
最新面试提效必备
登录
/
注册
Boundary
2017-05-16 19:31
中国人民解放军国防科技大学 C++
关注
已关注
取消关注
头条 一面挂 😂😂😂
问了两个算法题 1.给n个数,按字典序排序后,求第m个数 2. K个超长有序数组,求中位数 第一个题 勉强答对,但是面试官不满意 第二题就没答出来。主要是自己太菜了。 求各位大神,说说该怎么做吧
提示
全部评论
推荐
最新
楼层
盛夏de午夜
腾讯_研发
如果这个数是有范围的比如是int的范围,那就可以二分数的范围来查找。 1.那么可以假设用 (int最大值+int最小值)/2,作为假设中位数mid。 2.对于k个数组,均去查找mid所对应的位置,然后计算所有数组中比mid小和比mid大的数的个数lcont,rcount,因为是有序的,这个过程只要 klogn (n为数组长度)。 3.如果lcount==rcount ,那么mid就是真正的中位数 4.否则继续二分范围,比如lcount大,就让mid往左二分。 总的时间复杂度应该是log(数的范围)*k*logn 。log(数的范围) 一般不大,int的话就32
点赞
回复
分享
发布于 2017-05-17 10:33
客户端布道师字节分布
字节跳动_抖音搜索_tech lead
/** * Created by tlh on 2017/5/17. * 求两个排序数组合并后的中位数 * 设数组A和B,长度分别为m和n, 要求时间复杂度为O(log(m+n))。 * 用二分查找的思想,求合并后数组的第k个数。每次二分的过程都要设法舍弃掉数组的一部分,从而达到收敛缩小查找范围的效果。 * 从数组A和B分别取第k/2个数,当A[k/2-1] < B[k/2-1],则A的前k/2个元素必定在合并后的数组的前k个元素内,舍弃这A的前k/2个元素。 * 否则,舍弃B中前k/2个数。 * 接下来,递归在剩下的(m+n-k/2)的元素中找第(k-k/2)元素。 * https://www.jiuzhang.com/qa/1768/ */ public class MedianOfTwoSortedArrays { // 找到第K个元素 private int findKth(int[] A, int iA, int jA, int[] B, int iB, int jB, int k) { int m = jA - iA + 1; // 数组A的长度 int n = jB - iB + 1; // 数组B的长度 if (n < m) return findKth(B, iB, jB, A, iA, jA, k); // 保证数组A长度比数组B长度小 if (m == 0) return B[k - 1]; // 当较小的数组跑完了,返回数组B的第k个 if (k == 1) return Math.min(A[iA], B[iB]); // 返回第1个数 // 将k分成两部分 int lenA = Math.min(k / 2, m); // 取数组A的前lenA个元素 int lenB = k - lenA; // 取数组B的前lenB个元素 int pa = iA + lenA - 1; // 数组A的第lenA个元素 int pb = iB + lenB - 1; // 数组B的第lenB个元素 // 判断A[pa]和B[pb]的大小 if (A[pa] < B[pb]) return findKth(A, pa + 1, jA, B, iB, jB, k - lenA); // 舍弃数组A的前lenA个元素 else if (A[pa] > B[pb]) return findKth(A, iA, jA, B, pb + 1, jB, k - lenB); // 舍弃数组B的lenB个元素 else return A[pa]; // A[pa]或B[pb]就是对应的第k个数 } public float getMedian(int[] A, int[] B) { int totalLen = A.length + B.length; if ((totalLen & 1) == 1) { // 总数组长度为奇数 return findKth(A, 0, A.length - 1, B, 0, B.length - 1, totalLen / 2); } else { // 总数组长度为偶数 return (findKth(A, 0, A.length - 1, B, 0, B.length - 1, totalLen / 2) + findKth(A, 0, A.length - 1, B, 0, B.length - 1, totalLen / 2 + 1)) / 2.0f; } }
点赞
回复
分享
发布于 2017-05-17 18:20
清夜
北京邮电大学 C++
初步思考了一下,说一下自己的想法,如有误,轻喷... 对于第一题,字典序也是一种全序,这样的话使用partition的思路应该也可以O(log(n)),需要自己定义比较函数 对于第二题,应该是和2个数组的情况类似,相当于判断k个数组的第rank / k 个元素,找其中最小的淘汰元素。感觉实现起来也挺复杂,复杂度的话是在O(klogn)吧,不太确定 之前还想了使用堆的方法,就是使用一个最小堆存储数组首地址(指针),键值就是首元素值,然后每次取堆顶指针对应元素,递增指针,这样就改变了键值,调整堆,然后重复过程n/2次找到中位数 复杂度是O(klogk + n/2 * logk),只是比nk稍微好一点。。。。。。
点赞
回复
分享
发布于 2017-05-17 20:18
Boundary
楼主
中国人民解放军国防科技大学 C++
关于第一题, 是不是可以用堆排序? 定义某种比较函数cmp, 使得可以让11>101. 维护一个大小为m的大顶堆, 取前m个元素组成大顶堆, 遍历剩下的n-m个元素, 对于新的元素, 如果小于堆顶元素, 就替换堆顶元素,并调整堆, 否则就跳过该元素.继续比较下一个新的元素. 直到所有元素遍历完, 返回堆顶元素. 这样做的复杂度为O(nlog(m)). 但这种做法不适用于m很大的情况.
点赞
回复
分享
发布于 2017-05-17 19:22
sky_
University of Otago C++
第二道题,二分,
点赞
回复
分享
发布于 2017-05-17 17:20
东风造极
中国科大 Java
第一题,是这个题目?http://blog.csdn.net/fool _ran/article/details/40479059
点赞
回复
分享
发布于 2017-05-17 14:36
已注销
第一题的做法是: 将所有数字都在最后补充0,直到到位数相同,即位数不够的一直乘10,然后从小到大排序,第m个数字删去最后补充的0就是答案。 时间复杂度大约是n*logn,补0是复杂度为19*n,logn和19相差不大。
点赞
回复
分享
发布于 2017-05-17 12:10
静静卟噜卟噜
三峡大学 Java
为啥头条面试官都是女的
点赞
回复
分享
发布于 2017-05-17 08:53
zehua
西安交通大学 测试开发
我是来看大神怎么解的~
点赞
回复
分享
发布于 2017-05-16 23:47
C.C.
河北师范大学 iOS开发
第二个题目可以 维护两个堆来找中位数。
点赞
回复
分享
发布于 2017-05-16 22:21
盛夏de午夜
腾讯_研发
感觉你第一题答出来,第二题把k=2说清楚,应该没问题
点赞
回复
分享
发布于 2017-05-16 21:20
nicaiww
南京大学 Java
面试官是个女的?
点赞
回复
分享
发布于 2017-05-16 20:33
elop
南京航空航天大学 C++
都已经有序了?还求什么中位数
点赞
回复
分享
发布于 2017-05-16 20:25
牛客1973
重庆邮电大学 C++
楼主面的什么岗位?
点赞
回复
分享
发布于 2017-05-16 20:23
晴天158
Grab_Delv_服务端研发
第二题百度考了,不过是个简单版,给俩有序数组找中位数,要求复杂度log(数组和的长度)
点赞
回复
分享
发布于 2017-05-16 19:54
暂无评论,快来抢首评~
相关推荐
10-30 21:15
百度_AIDU-JAVA工程师(准入职员工)
百度内推,百度内推码
💔百度一面 | LRU写太快被问是不是背过?1. 📂 MySQL回表查询说一下你理解的Mysql索引,什么时候回表?思考过为什么这样设计吗?2. 🔄 Update索引变化Update主键索引、辅助索引、联合索引,数据都是怎么变的?3. 📝 UndoLog作用说下UndoLog,只有是不是只有Rollback才会触发UndoLog?4. 🔍 Binlog同步机制Binlog 日志是 Master 推的还是 Salve 来拉的?5. 📦 Redis主从同步Redis 主从同步是怎样的过程?在工作中你们是怎么同步的?6. 💾 AOF文件过大处理Redis的AOF文件过大怎么处理?怎么解...
点赞
评论
收藏
分享
10-29 16:30
广东工业大学 材料工程师
月薪1W在老家直接躺赢
身边同学留本地的大多 6-8k,我这个 1W 到手快 9k,房租 1500 能租一室一厅,吃饭通勤一个月 2000 足够,每个月还能攒下 5k+😆 不用挤地铁、不用抢工位,下班就能回家吃妈妈做的饭,感觉这个薪资在二三线城市已经是中上水平,性价比直接拉满,秋招能拿到真的知足了!
牛泪中:
每天都能见老妈就是最大的幸福
校招生月薪1W算什么水平
点赞
评论
收藏
分享
09-19 14:36
已编辑
门头沟学院 C++
26届鹅
有很多想说的,还是咽下去了,还是咏诗一首送给诸位罢......臣本机米,躬耕于南北绿豆之野,混迹于哈基米大地。苟全喵命于粮荒,不求闻达于饭盆。先帝不以臣卑鄙,猥自枉屈,三顾臣于绿豆堆中,咨臣以捕鼠之事。由是感激,遂许先帝以驱夜鼠。今北伐未竟,粮罐将空,臣已油尽灯枯。喵爪渐软,再不能临阵哈人;喵眼昏花,再不能关乎哈市兴衰。悠悠苍天,何薄于米!愿陛下此后,亲理猫砂,勿使秽气满室;善存猫粮,莫教饿殍遍阶。若逢新喵入户,望念臣旧情,多分一勺罐头——臣虽去,魂仍绕榻,必护陛下餐餐有鱼,夜夜安睡。临表啮纸,爪痕泣血,不知所云。
我的秋招日记
点赞
评论
收藏
分享
09-27 22:14
已编辑
阿里巴巴_后端
百度三面面了125min
燃尽了,出了五道手撕我是在应聘ceo吗————————————————9.27转offer评估,能赢吗
算法丰川祥:
5道手撕666,面试官找你刷题来了
百度求职进展汇总
点赞
评论
收藏
分享
11-02 12:25
门头沟学院 前端工程师
字节财经前端一面面经
1.项目介绍 2.先聊一下项目,看你做了一个agent项目,介绍一下这个做什么的 3.用vue-flow 做可视化?那你们节点之间的连接逻辑是怎么做的?比如连线校验怎么做,支持动态规则吗 4.如果是一些拖拽、缩放这种高频操作下,肯定很卡顿,用哪些手段做性能优化呢 5. 那你刚提到16种节点,你这些节点之间的连接有没有做校验?比如判断节点类型、出入线数量限制这种 6. 你那个连接规则是怎么做的 7.虚拟化这部分是怎么判断哪些节点该渲染哪些不该渲染的 8. 那你缩放、拖拽这么频繁更新 DOM,是怎么节流的?你 throttle 控制的是哪个函数? 7. 用Web Worker?怎么划分主线程和 W...
查看16道真题和解析
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
2
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
java后端学习经验分享(大三进大厂版)
1.5W
2
...
26届0实习秋招总结
1.0W
京东秋招开奖
热聊中
3
...
企鹅后端日常实习一面
6522
4
...
摸爬滚打,我也一定要离开华为
4515
5
...
那个绩点倒数,挂科7门的女生最后考上了985研究生
3707
6
...
26届双非本拿下美团SSP的真实感受
3707
7
...
大家秋招压力很大一般怎么调节呀
3517
8
...
十一月,希望有个好的开始
3488
9
...
愿大家都能成为很厉害的人
2863
10
...
饿了么被淘宝闪购夺舍了,HC和团队会变吗
2322
创作者周榜
更多
正在热议
更多
#
你实习是赚钱了还是亏钱了?
#
7182次浏览
64人参与
#
找工作八股要背到什么程度?
#
5442次浏览
90人参与
#
京东开奖
#
435260次浏览
2464人参与
#
秋招开始捡漏了吗
#
37432次浏览
264人参与
#
我在牛爱网找对象
#
203364次浏览
1412人参与
#
用一句话形容你的团队氛围
#
4441次浏览
56人参与
#
入职以后才知道的校招谎言
#
102506次浏览
647人参与
#
你找工作是从容有余 or 匆忙滚爬?
#
3966次浏览
44人参与
#
上班后,才发现大学__白学了
#
6647次浏览
41人参与
#
同bg的你秋招战况如何?
#
161632次浏览
935人参与
#
今年秋招还有金九银十吗
#
27222次浏览
249人参与
#
今年秋招是回暖还是遇冷
#
4757次浏览
36人参与
#
五一之后,实习真的很难找吗?
#
90669次浏览
561人参与
#
规定下班时间vs实际下班时间
#
57545次浏览
332人参与
#
学历对求职的影响
#
553279次浏览
3924人参与
#
辞职后的日常
#
17159次浏览
84人参与
#
你喜欢工作还是上学
#
79801次浏览
865人参与
#
打工人的精神状态
#
104246次浏览
1321人参与
#
Offer比较,求稳定还是求发展
#
65856次浏览
272人参与
#
分享一个让你热爱工作的瞬间
#
44953次浏览
395人参与
#
一人一个landing小技巧
#
129418次浏览
1467人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务