寻找两个正序数组的中位数

通过这道题聊一聊二分查找的几点
首先,二分查找一定要遍历所有的结果从而保证不会遗漏。对于长度为k的数组,二分查找一共有多少种结果?
除了结果正好位于查找的目标数组之内情形以外,对于长度为K的数组,二分查找共有k+1种结果,即可能比最小值小,也可能比最大值大。
因此,二分查找的初始上下界要取0和K。
其次,关于mid的选择。一般而言mid会取(low+high)/2
第三,为了保证不至于陷入死循环,即一定会有一个输出值,low和high的递推情形要取mid+1和mid-1;判断情形要取low>=high终止循环。
这其中就涉及到在编码的时候,一定要将mid的情形加以分析,从而将值恰好取到mid时是否符合要求进行讨论。故在下一次循环时不再考虑mid的值。
最后,由于向下取整的关系,除非low与high相等,否则mid的值不会等于high。故将high取为上界K是安全的,num[mid]不会出现越界情形。除非数组为空数组。
二分查找也可以写成别的方式,但这个模板可以作为参考。

leetcode解题代码


```java
/*
采用划分数组的思路解题
首先要确认的是将数组已经划分为了左右两部分,且满足左右相等,且左半部分整体小于右半部分
此时需要比较的信息是,划分长度左右共四个数字,以及总长度是奇是偶
若总长度为k,此时左半部分的总长度为(k+1)/2,若k为奇,中位数为第(k+1)/2个,若k为偶,中位数为第k/2与第k/2+1的平均
这里涉及到二分查找的左右边界问题。因为二分查找
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值