4. 寻找两个有序数组的中位数 (leetcode)

给定两个大小为 m 和 n 的有序数组 nums1 和 nums2。

请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m + n))。

你可以假设 nums1 和 nums2 不会同时为空。

一看到时间复杂度O(log)就知道应该二分法,我自己写的一段程序老是报错,这里就直接粘贴leetcode官方题解了。

收获:

  1. 本题二分法是循环实现的

  2. 有两个边界,值小了,就把 i 的 index 赋值给左边界, 值大了, 就把 i 的 index 赋给右边界

  3. 温习了 if 语句的一行写法         

    if nums1[i] < nums2[j-1]: leftM = i +1

    elif nums2[j] < nums1[i - 1] : right = i -1 

    

  leftM, rightM, halfLength  =   0,m,(m+n+1)/2

  while leftM < rightM:

    i = (leftM+rightM)/2

    j = halfLength - i 

    if nums1[i] < nums2[j-1]: leftM = i +1

    elif nums2[j] < nums1[i - 1] : right = i -1 

    else:

      ......

      ......

原文地址:https://www.cnblogs.com/ChevisZhang/p/12245699.html