首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
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
TellH
渔家头治洪大学 Java
/** * 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
晴天158
Grab_Delv_服务端研发
第二题百度考了,不过是个简单版,给俩有序数组找中位数,要求复杂度log(数组和的长度)
点赞
回复
分享
发布于 2017-05-16 19:54
牛客1973
重庆邮电大学 C++
楼主面的什么岗位?
点赞
回复
分享
发布于 2017-05-16 20:23
elop
南京航空航天大学 C++
都已经有序了?还求什么中位数
点赞
回复
分享
发布于 2017-05-16 20:25
nicaiww
南京大学 Java
面试官是个女的?
点赞
回复
分享
发布于 2017-05-16 20:33
盛夏de午夜
腾讯_研发
感觉你第一题答出来,第二题把k=2说清楚,应该没问题
点赞
回复
分享
发布于 2017-05-16 21:20
C.C.
河北师范大学 iOS开发
第二个题目可以 维护两个堆来找中位数。
点赞
回复
分享
发布于 2017-05-16 22:21
zehua
西安交通大学 测试开发
我是来看大神怎么解的~
点赞
回复
分享
发布于 2017-05-16 23:47
静静卟噜卟噜
三峡大学 Java
为啥头条面试官都是女的
点赞
回复
分享
发布于 2017-05-17 08:53
已注销
第一题的做法是: 将所有数字都在最后补充0,直到到位数相同,即位数不够的一直乘10,然后从小到大排序,第m个数字删去最后补充的0就是答案。 时间复杂度大约是n*logn,补0是复杂度为19*n,logn和19相差不大。
点赞
回复
分享
发布于 2017-05-17 12:10
东风造极
中国科大 Java
第一题,是这个题目?http://blog.csdn.net/fool _ran/article/details/40479059
点赞
回复
分享
发布于 2017-05-17 14:36
sky_
University of Otago C++
第二道题,二分,
点赞
回复
分享
发布于 2017-05-17 17:20
Boundary
楼主
中国人民解放军国防科技大学 C++
关于第一题, 是不是可以用堆排序? 定义某种比较函数cmp, 使得可以让11>101. 维护一个大小为m的大顶堆, 取前m个元素组成大顶堆, 遍历剩下的n-m个元素, 对于新的元素, 如果小于堆顶元素, 就替换堆顶元素,并调整堆, 否则就跳过该元素.继续比较下一个新的元素. 直到所有元素遍历完, 返回堆顶元素. 这样做的复杂度为O(nlog(m)). 但这种做法不适用于m很大的情况.
点赞
回复
分享
发布于 2017-05-17 19:22
清夜
北京邮电大学 C++
初步思考了一下,说一下自己的想法,如有误,轻喷... 对于第一题,字典序也是一种全序,这样的话使用partition的思路应该也可以O(log(n)),需要自己定义比较函数 对于第二题,应该是和2个数组的情况类似,相当于判断k个数组的第rank / k 个元素,找其中最小的淘汰元素。感觉实现起来也挺复杂,复杂度的话是在O(klogn)吧,不太确定 之前还想了使用堆的方法,就是使用一个最小堆存储数组首地址(指针),键值就是首元素值,然后每次取堆顶指针对应元素,递增指针,这样就改变了键值,调整堆,然后重复过程n/2次找到中位数 复杂度是O(klogk + n/2 * logk),只是比nk稍微好一点。。。。。。
点赞
回复
分享
发布于 2017-05-17 20:18
还没有回复哦~
相关推荐
02-24 19:09
门头沟学院 数据分析师
大厂数据仓库数据建模八股文面试题及参考答案(虾皮希音Bigo等多家公司汇总)
什么是数据仓库,和数据库有什么区别?数据仓库(Data Warehouse,DW)是专门为支持企业决策而设计的系统,通过整合来自不同来源的数据,提供统一的分析视图。其核心目标是支持复杂的查询、历史数据分析和数据挖掘。数据仓库通常采用非规范化结构(如星型模型或雪花模型),并围绕业务主题(如销售、库存)组织数据。数据库(Database)则主要用于事务处理(OLTP),支持日常业务操作,如订单录入、用户注册等。数据库设计遵循规范化原则(如第三范式),以消除冗余并确保事务的原子性和一致性。区别对比设计目标支持决策分析(OLAP),处理复杂查询和聚合操作支持事务处理(OLTP),保证数据增删改查的高效...
大数据从入门到精通-最全...
点赞
评论
收藏
分享
02-25 17:47
中南大学 Java
进来自查下你拿的offer是否合格
我觉得一个好的offer应该满足以下几个特点,提前声明:这些判断要素都是极其主观的,比如薪资你自己觉得高那就是真的高,不需要和别人比较。好offer的几个特点如下:1.薪资高福利待遇好;2.部门稳定不裁员;3.离家近;4.晋升快;5.工作内容方便跳槽(毕竟跳槽才是涨薪第一动力)。你可以根据上面给出的几个特点来扪心自问自我诊断一下自己拿到的offer怎么样,然后来进一步决定是否春招继续征战。自评表如下:1.自己offer满足上面0个特点:我的评价是惨,想方设法抓紧时间冲春招吧!2.自己offer满足上面1个特点:手上的offer很一般,有时间和精力最好继续冲一冲!3.自己offer满足上面2个特...
春招启动,你开始投递了吗?
你今年的平均薪资是多少?
点赞
评论
收藏
分享
02-15 16:23
中南大学 Java
哇为胃大,无需多盐
以后回家吃席坐公务员一桌#牛客创作赏金赛# #华为# #华为工作体验# #华为开奖那些事#
野猪不是猪🐗:
签了美团真是不一样! 亲戚们都知道我签了美团,过年都围着我问送一单多少钱,还让弟弟妹妹们引以为戒,笑我爸我妈养了个🐢孩子,说从小就知道我这个人以后肯定没出息,我被骂的都快上天了
牛客创作赏金赛
华为工作体验
点赞
评论
收藏
分享
02-16 13:52
门头沟学院 Java
不是,这对吗
给🐭🐭个面试机会吧:
嘿,mvbatis
点赞
评论
收藏
分享
02-21 08:51
北京大学 Java
学而思内推
学而思2025届春季校招内推码【DSKEFayj】教培行业头部上市公司【岗位】线下面授主讲(多业务线可选,详见投递主页)【🏫地点】全国39城可选【💰薪资&福利】首年年薪10-30w,每年4-6次涨薪窗口✅保障类:六险一金;年度体检、年假+福利假期✅成长类:岗前岗后全方位培训、资深教师带教✅娱乐类:团建下午茶、节日礼盒、花样周边等【内推投递通道】https://app.mokahr.com/m/campus-recruitment/tal/148080?recommendCode=DSKEFayj#/jobs【推荐码】DSKEFayj快来拿offer!考公考研等无违约金!
学而思公司福利 471人发布
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
2
收藏
分享
评论
提到的真题
返回内容
全站热榜
更多
1
...
实习怎么偷产出?
2.4W
2
...
怎么实习,含金量最高?
1.2W
3
...
有奖征文:职场上哪些行为很加分?投稿得丰厚奖励!
1.2W
4
...
面试大厂反拷打指南(字节&腾讯)
1.2W
5
...
字节生活服务后端开发日常实习一二三面经
7279
6
...
字节春招前端一面二面凉经
7233
7
...
字节跳动 二面凉经
6723
8
...
工科双非一定要读研
5307
9
...
搬出当年写的22考研经验贴哈哈
5064
10
...
明知道自己考不上研,还要坚持吗?
4962
创作者周榜
更多
正在热议
更多
#
如何KTV领导
#
33073次浏览
285人参与
#
你投递的公司有几家约面了?
#
39519次浏览
236人参与
#
掌阅春招
#
89786次浏览
524人参与
#
研究所笔面经互助
#
55330次浏览
395人参与
#
软开人,秋招你打算投哪些公司呢
#
67499次浏览
727人参与
#
vivo求职进展汇总
#
168166次浏览
1022人参与
#
生物制药/化工校招攻略
#
33985次浏览
265人参与
#
你遇到过哪些神仙同事
#
45757次浏览
471人参与
#
当下环境,你会继续卷互联网,还是看其他行业机会
#
73509次浏览
546人参与
#
硬件/芯片公司工作体验
#
58746次浏览
560人参与
#
如何缓解入职前的焦虑
#
142206次浏览
1129人参与
#
TP-LINK工作体验
#
38717次浏览
787人参与
#
Tplink求职进展汇总
#
102538次浏览
570人参与
#
在职场上,你最讨厌什么样的同事
#
10848次浏览
139人参与
#
你最近一次加班是什么时候?
#
32377次浏览
252人参与
#
考研人,我有话说
#
17752次浏览
345人参与
#
软件开发春招备战日记
#
58198次浏览
499人参与
#
秋招白月光
#
53406次浏览
787人参与
#
产品每日一题
#
29314次浏览
412人参与
#
过年最难忘的一件事
#
10982次浏览
155人参与
#
你今年的平均薪资是多少?
#
94567次浏览
462人参与
牛客网
牛客企业服务