首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
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-23 17:49
门头沟学院 Java
面试紧张破防现场
最近面试还好,表现还可以,但是以前刚开始面试以及遇到压力面和自己不会的题目的时候,就容易紧张。1. 嘴巴先“掉链子”:越想说好越说不顺平时能说会道,但面试紧张起来,嘴就像被粘住了,脑子和嘴完全不同步。说话卡壳还重复:比如想介绍项目经历,本来准备好说“我负责后端接口开发”,结果一开口变成“我…我负责那个…就是后端…后端接口的开发,对,就是接口开发”,一句话翻来覆去说,还总在“然后”“那个”“嗯”这种词上卡壳,越卡越慌,越慌越说不明白。忘词后大脑空白:要是面试官突然问个没准备到的问题,比如“这个项目里你遇到的最大困难是什么”,瞬间脑子就“嗡”一下,之前想的案例全没影了,只能盯着面试官傻笑,半天憋出...
面试紧张时你会有什么表现...
点赞
评论
收藏
分享
昨天 11:57
南京航空航天大学 C++
三年之期已到,你后悔读研了吗?
2022 年的时候,我在牛客发了一个动态,内容大概是我有了一个小厂实习转正的 offer,年薪 30 万左右,意外得知自己保研后,纠结一段时间还是选择读研再苟三年,这个动态有了快 3 万的浏览和几百条评论,现在重新读这些评论,还是能感受到当年的就业环境寒气逼人,一半以上的同学认为有 offer 不工作读研三年会后悔,也有些同学认为 offer 不满意可以读研提升一下自己。如今三年之期已过,虽然这三年过得非常辛苦,甚至可以说是很痛苦,但我依然满意读研这个选择。给出一组数据上的对比:实习 offer: 三年前:一家不大的量化实习offer;三年后:暑期拿了腾讯、快手、网易互娱、拼多多、阿里灵犀的实...
点赞
评论
收藏
分享
10-17 09:06
门头沟学院 Java
27届java日常实习简历求拷打
第一次写简历,没经验,牛爷爷们指点一下!最近投了几天官网和boss,基本没有约面,简历方面存在什么问题吗?(项目很烂大街,我知道
点赞
评论
收藏
分享
10-22 19:26
北京理想汽车有限公司_理想空间_后端开发(实习员工)
27届北漂实习day3
对面老哥这屏幕要起飞了哈哈哈哈
schizophre...:
章鱼博士啊
我的实习日记
点赞
评论
收藏
分享
10-22 09:50
网易游戏_游戏研发工程师(准入职员工)
网易互娱内推,网易互娱内推码
网易**不管问你啥,记住一个话术原则小小的提醒下各位留子:**时不要直来直去有啥说啥;千万得多思考别说太满给自己留个思考或回旋的余地・1、被问 “有没有接触过网易的产品”(哪怕了解不多)别直接说 “没有”(容易显得缺乏兴趣)试试:“之前用过网易云音乐和网易新闻,对产品的界面设计和功能逻辑有过留意。虽然没有深入研究,但能感受到网易产品注重用户体验的特点,入职后会系统学习相关产品知识”・2、被问 “能接受高强度的项目加班吗”别勉强说 “没问题”(后续可能难以承受)试试:“我理解互联网行业项目推进时需要集中精力,在关键节点愿意配合团队加班。但也会注重提升工作效率,合理规划时间,尽量在正常工作时间完成...
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
2
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
今天1024,用一句话证明你是程序员
5625
2
...
校招三个月光速裸辞
4280
3
...
谈薪前必看! 这些坑不要踩....
3537
4
...
出生在1024的天选码农
2795
5
...
一句话概括我在团队混的怎么样
2223
6
...
27实习还在投简历这不就是找工作!求分析!
1974
7
...
【牛客1024程序员节 · 代码彩蛋,等你解锁!】
1974
8
...
不知不觉,工作三年。。。
1821
9
...
作业帮面经~
1289
10
...
1024节你们公司都发什么礼品了
1134
创作者周榜
更多
正在热议
更多
#
牛客树洞,我想对你说
#
18517次浏览
136人参与
#
大学最后一个寒假,我想……
#
55776次浏览
613人参与
#
快手技术岗信息交流阵地
#
8065次浏览
58人参与
#
你最近一次加班是什么时候?
#
94381次浏览
515人参与
#
除了主业以外,你还有哪些其他收入?
#
32390次浏览
299人参与
#
你最满意的offer薪资是哪家公司?
#
42861次浏览
214人参与
#
求职中的尴尬瞬间
#
7491次浏览
66人参与
#
应届生被毁约被毁意向了怎么办
#
48182次浏览
282人参与
#
当下环境,你会继续卷互联网,还是看其他行业机会
#
137983次浏览
884人参与
#
机械人避雷的岗位/公司
#
30475次浏览
250人参与
#
研究所笔面经互助
#
98122次浏览
550人参与
#
牛客周边新品开箱
#
12010次浏览
91人参与
#
国央企薪资爆料
#
123522次浏览
580人参与
#
如何KTV领导
#
74448次浏览
505人参与
#
硬件人的春招flag
#
53276次浏览
435人参与
#
牛友的志愿填报指南
#
36839次浏览
189人参与
#
打工人锐评公司红黑榜
#
176359次浏览
1023人参与
#
怎么给家人解释你的工作?
#
15827次浏览
95人参与
#
得物app工作体验
#
30386次浏览
69人参与
#
国企还是互联网,你怎么选?
#
173019次浏览
1312人参与
#
25届非技术实习投递记录
#
132534次浏览
993人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务