给定两个大小为 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:
......
......