关注
这里我们需要定义一个函数来在两个有序数组中找到第K个元素,下面重点来看如何实现找到第K个元素。首先,为了避免产生新的数组从而增加时间复杂度,我们使用两个变量i和j分别来标记数组nums1和nums2的起始位置。然后来处理一些边界问题,比如当某一个数组的起始位置大于等于其数组长度时,说明其所有数字均已经被淘汰了,相当于一个空数组了,那么实际上就变成了在另一个数组中找数字,直接就可以找出来了。还有就是如果K=1的话,那么我们只要比较nums1和nums2的起始位置i和j上的数字就可以了。难点就在于一般的情况怎么处理?因为我们需要在两个有序数组中找到第K个元素,为了加快搜索的速度,我们要使用二分法,对K二分,意思是我们需要分别在nums1和nums2中查找第K/2个元素,注意这里由于两个数组的长度不定,所以有可能某个数组没有第K/2个数字,所以我们需要先检查一下,数组中到底存不存在第K/2个数字,如果存在就取出来,否则就赋值上一个整型最大值。如果某个数组没有第K/2个数字,那么我们就淘汰另一个数字的前K/2个数字即可。有没有可能两个数组都不存在第K/2个数字呢,这道题里是不可能的,因为我们的K不是任意给的,而是给的m+n的中间值,所以必定至少会有一个数组是存在第K/2个数字的。最后就是二分法的核心啦,比较这两个数组的第K/2小的数字midVal1和midVal2的大小,如果第一个数组的第K/2个数字小的话,那么说明我们要找的数字肯定不在nums1中的前K/2个数字,所以我们可以将其淘汰,将nums1的起始位置向后移动K/2个,并且此时的K也自减去K/2,调用递归。反之,我们淘汰nums2中的前K/2个数字,并将nums2的起始位置向后移动K/2个,并且此时的K也自减去K/2,调用递归即可。
点赞
相关推荐
点赞 评论 收藏
分享
点赞 评论 收藏
分享
牛客热帖
更多
- 1... 牛客2025年度报告—道心初立,夯实基础1.3W
- 2... 27届学院二本,袋鼠云->快手->腾讯wxg,25年末聊聊我的前端之路1.2W
- 3... 本科五段大厂实习,秋招五个offer,我的校招结束了6860
- 4... 大四双非水产专业上岸阿里后端(五)5946
- 5... 适可而止吧!你就是“烂泥”4493
- 6... 我的世界观,就是对抗优绩主义的武器4212
- 7... 27双非杀入字节!3676
- 8... 实习被“放养”零产出,该及时止损还是继续苟着?3017
- 9... 寒假实习会影响暑期投递吗?2178
- 10... 被问有没有男朋友 如果有同事欺负你怎么办2156
正在热议
更多
# 实习没人带,苟住还是跑路? #
4610次浏览 128人参与
# 非技术岗简历怎么写 #
274342次浏览 3162人参与
# 元旦假期你打算怎么过 #
3622次浏览 108人参与
# 春招前还要继续实习吗? #
850次浏览 21人参与
# 大家实习都在做什么? #
4167次浏览 46人参与
# 妈妈治愈了你哪些脆皮时刻 #
38212次浏览 338人参与
# 你做过哪些dirty work #
24757次浏览 154人参与
# 面试官问过你最刁钻的问题是什么? #
2531次浏览 48人参与
# 我来点评面试官 #
37391次浏览 163人参与
# 我们是不是被“优绩主义”绑架了? #
5314次浏览 199人参与
# 实习/项目/竞赛奖项,哪个对找工作更重要? #
102400次浏览 1185人参与
# 一人说一家双休的公司 #
2519次浏览 43人参与
# 牛客2025仙途报告 #
25015次浏览 355人参与
# 职场中对你有帮助的书 #
25563次浏览 216人参与
# 毕业论文怎么查AI率 #
69905次浏览 1937人参与
# 应届生初入职场,求建议 #
286074次浏览 2851人参与
# 查收我的offer竞争力报告 #
264075次浏览 1648人参与
# 找工作如何保持松弛感? #
127282次浏览 1457人参与
# 产品人专业大盘点 #
64250次浏览 317人参与
# 机械人你觉得今年行情怎么样? #
6093次浏览 87人参与