Problem
There are two sorted arrays nums1 and nums2 of size m and n respectively.
Find the median of the two sorted arrays. The overall run time complexity should be O(log (m+n)).
You may assume nums1 and nums2 cannot be both empty
Examples:
a = [1, 3], b = [2] —> 2.0
a = [1, 2], b = [3, 4] —> 2.5
Solutions
- 刚开始是一点思路都么得…如果没有O(log (m+n))的限制,还能用遍历的方法找到,但是加了log,应该是要用二叉的
- 题解里面给出了将两个数组,以i,j为分界,分为两部分:[0,i-1], [i,m-1], [0, j-1], [j,n-1],使得左边的[0,i-1], [0,j-1] 全都小于右边的[i,m-1], [j,n-1],利用中位数的意义
- 前提要确保m<=n,这很重要!刚开始就弄反了导致一直找不到bug..
- 同时配合二叉搜索,这时搜索的条件就变成了:如果左边的有大于右边的数,就缩小,如果右边的有小于左边的数,就扩大
- 这里需要判断几个边界条件:i=0, j=0, i=m, j=n这四种
C++ Codes
用时是36ms, 内存9.6MB
1 | class Solution { |
Python Codes
1 | class Solution: |
总结
- 对用到中位数的题目可以想想中位数的意义,搜索那个分界点,可以直接遍历分界点也可以二叉找,看时间复杂度。
- 要注意前提是m<=n,不然会出错
- 注意搜索时候变化条件,还有几个边界情况注意判断
- while循环的条件这里是imin<=imax,等于的时候就是到叶子节点了
- python这里居然只能用双斜线整除