首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
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-22 09:39
海康威视_自动化开发工程师(准入职员工)
海康威视内推,海康威视内推码
分享一下自己对海康的感受,也在海康总部的3期。 之前看了网上的评论实属是有点吓人的,但是百闻不如一见自己终究是亲自感受了一下。 这可能是我国内外大大小小加起来的第6段实习或者工作。 海康首先给我的感觉是人真的好多,尤其食堂的人,我可能上学都没有见过这么多人,还有电梯,我每次坐是一头雾水。当然这些对于我来说都不是很重要。 可能很多人最关心的就是海康的工作强度和时间是不是真如网上说的那么严重,而通过这段时间的感受,我觉得海康可能是我节奏最慢的一次体验,完成了任务就可以开开心心的回家了,根本不需要无效加班,如果自己想学点产品类的知识还是可以在公司里多学一点的。 关于部门小组氛围,我一开始是有点惊讶的...
海康威视公司福利 1125人发布
点赞
评论
收藏
分享
10-24 11:31
已编辑
百度_高级研发工程师
如何选一个最佳匹配的offer?
昨夜雨疏风骤,两个offer在手,辗转反侧难眠,纠结哪个更牛,一个钱多事多,一个钱少事少,选哪都有烦恼,前景也难说好,大厂冻,小厂烧,外包咣咣就是敲。 今天段段结合曾经收到的近100份offer,谈谈应该如何结合自身条件、理想诉求、行业趋势来选定一个offer。一、都可以,要加钱 首先说明一点,如果你是那种,家里很有钱、或者很有资源的人,那么你不会纠结,大概率你会去一个养老单位或者可以只去追求自己的理想,其他什么都不用管,但大部分人都没有这种家庭托举,所以钱就是第一重要的东西。 选offer的时候,搞清楚薪资结构和福利待遇问题。 薪资结构:不要看offer上说的是多少薪,要看最后能给多少,多打...
面了100年面试不知...:
呜呜呜
从哪些方向判断这个off...
点赞
评论
收藏
分享
10-16 15:02
重庆大学 C++
收到秋招offer了但是公司幽如默
好一个“此实习非彼实习”烂做派是学透了的,工资是一分钱没有的
pitbull666:
这公司还不把名字挂出来吗
点赞
评论
收藏
分享
09-17 10:53
四川大学 C++
感觉双九双2是不是快厮杀完了,接下来该我单九的天下了
呜呜呜一个面试没有
牛客91242815...:
会写标书没有任何卵用,鉴定为横向垃圾导师的受害者
点赞
评论
收藏
分享
10-22 09:37
快手_快STAR广告引擎(准入职员工)
快手内推,快手内推码
客户端,快手春招一面面经,摘自优秀牛友60min项目问题拷打mysql的索引,按照不同的分类维度,分成哪几类?主键索引和非主键索引的区别聚簇索引和非聚簇索引的区别b树和b+树的区别什么情况下不需要回表操作索引失效有哪些场景mysql进行一次查询,会使用几种索引mysql的事务隔离级别事务隔离级别RR下,事务A读库存(是1), 事务B给库存加1并提交,A给库存加1,A读取库存值是多少举一个不可重复读的例子算法题:二叉树层序遍历快手26届秋季校园招聘正式批今日启动-无限次复活,无限次复活!-快Star岗位的应聘结果不影响正式批,快Star流程结束后,可以继续投递正式批岗位!【岗位类别】工程类、算法...
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
2
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
说真的,给和我一样的普通本科生的忠告
4964
2
...
云智lastday
2900
3
...
谈薪前必看! 这些坑不要踩....
2590
4
...
三年之期已到,你后悔读研了吗?
2281
5
...
数字马力发笔试
2047
6
...
公司开捞了,速改简历!
1795
7
...
拼多多后端笔试
1616
8
...
身边秋招逆风翻盘的人,都是怎么做的?
1543
9
...
同花顺c++一面
1516
10
...
27双非后端想转测开如何转?
1478
创作者周榜
更多
正在热议
更多
#
牛客树洞,我想对你说
#
27545次浏览
196人参与
#
选择和努力,哪个更重要?
#
116875次浏览
937人参与
#
“vivo”个offer
#
6391次浏览
52人参与
#
秋招许愿,本周能____
#
5640次浏览
47人参与
#
新凯来求职进展汇总
#
56344次浏览
148人参与
#
为了实习逃课值吗?
#
3372次浏览
42人参与
#
快手技术岗信息交流阵地
#
10597次浏览
71人参与
#
大学最后一个寒假,我想……
#
58006次浏览
636人参与
#
华为海思工作体验
#
32233次浏览
137人参与
#
运营每日一题
#
106112次浏览
874人参与
#
如何KTV领导
#
75691次浏览
512人参与
#
除了主业以外,你还有哪些其他收入?
#
33597次浏览
299人参与
#
哪些公司校招卡第一学历
#
216827次浏览
770人参与
#
你最满意的offer薪资是哪家公司?
#
44393次浏览
218人参与
#
25届非技术实习投递记录
#
133708次浏览
993人参与
#
你最近一次加班是什么时候?
#
95615次浏览
518人参与
#
求职中的尴尬瞬间
#
10338次浏览
69人参与
#
应届生被毁约被毁意向了怎么办
#
49666次浏览
283人参与
#
硬件人的春招flag
#
54177次浏览
436人参与
#
秋招想进国企该如何准备
#
100003次浏览
499人参与
#
歌尔求职进展汇总
#
70114次浏览
357人参与
#
为什么国企只招应届生
#
210611次浏览
1241人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务