关注
这里我们需要定义一个函数来在两个有序数组中找到第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,调用递归即可。
点赞
相关推荐
2024-12-22 18:30
沈阳大学 工艺/制程工程师 点赞 评论 收藏
分享
02-16 09:00
中南大学 Java ![](https://static.nowcoder.com/head/533m.png)
点赞 评论 收藏
分享
02-14 11:30
华南农业大学 Java 点赞 评论 收藏
分享
牛客热帖
更多
- 1... 985计算机老学长掏心窝子:当年我踩过的坑,希望你们能绕开3.3W
- 2... 腾讯实习基地-ieg-Level Infinite-一面5301
- 3... 想要在大厂生存必须要学会提效4807
- 4... 字节飞书后端面试4457
- 5... 腾讯-后台开发-腾讯hr部门 一面4238
- 6... 实习入职第一天,应该做点啥❓3755
- 7... 2.17校招&实习招聘信息汇总3219
- 8... 重生归来,鼠鼠接手北区业务,这一次......3219
- 9... 实习第二天,被老员工欺负了3219
- 10... 【已挂】影石Insta360|嵌入式软件|日常实习一面2476
正在热议
更多
# 读研or工作,哪个性价比更高? #
24427次浏览 328人参与
# 如果重来一次你还会读研吗 #
154612次浏览 1697人参与
# 科大讯飞求职进展汇总 #
258926次浏览 2595人参与
# 秋招感动瞬间 #
10943次浏览 102人参与
# 阿里巴巴创始人马云回国 #
14251次浏览 87人参与
# 职场新人生存指南 #
195697次浏览 5397人参与
# 你最满意的offer薪资是哪家公司? #
11939次浏览 109人参与
# 长光卫星求职进展汇总 #
27594次浏览 184人参与
# 文科生还参加今年的春招吗 #
3399次浏览 29人参与
# 追觅科技求职进展汇总 #
8531次浏览 58人参与
# 选择和努力,哪个更重要? #
42250次浏览 472人参与
# 招聘要求与实际实习内容不符怎么办 #
41444次浏览 469人参与
# 打工人的工作餐日常 #
24722次浏览 221人参与
# 机械制造岗投递时间线 #
19322次浏览 324人参与
# 小红书求职进展汇总 #
40447次浏览 346人参与
# 影石Insta360求职进展汇总 #
107694次浏览 969人参与
# 如果再来一次,你还会学硬件吗 #
102831次浏览 1236人参与
# 机械人选offer,最看重什么? #
68606次浏览 433人参与
# 机械人怎么评价今年的华为 #
180353次浏览 1485人参与
# 滴!实习打卡 #
554772次浏览 6009人参与