两个有序数组的中位数:
解法一:按照找数组中第k小的数,两个数组开头各一个指针,决出比较小的一个数,直到第k个。该方法时间复杂度O(n)
解法二:按照找数组中第k小的数,比较两个数组的第k/2个数的大小(第k/2个数是k/2-1号元素,注意数组的边界),若nums1[k/2-1]<=nums2[k/2-1],则从nums1中删去nums1[:k/2],反之同理操作,递归查找nums1[:k/2]和nums2中第k-k/2小的数,直至找第1小的数或某一数组为空、另一数组的第m小的数呼之欲出。时间复杂度O(log(n1+n2))
解法三:同解法二采用二分的思想,设nums1[:i]和nums2[:j]正好是nums1和nums2合并后的有序数组的前一半元素,中位数隐含在i,j索引附近。且j=(n1+n2+1)/2-i,于是确定i的值j的值也确定,在最短的数组中里用nums1[i-1]<=nums2[j], nums1[i]>nums2[j-1]的约束二分确定i的值。时间复杂度O(log(min(n1,n2)))
参考链接:4. 寻找两个正序数组的中位数 创建于2022.3.16/11.22,修改于2022.3.16/16.19