问题描述:There are two sorted arrays A and B 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)).
思路:
1. 在2个有序的数组中找中值,那么可以把2个数组合并,然后直接去中值就可以,时间复杂度为O(m+n)/2。因为题目没看清,以为是O(m+n)。所以写了个简单实现,结果还accpect了。
2. 如果要O(log(m+n)),直接的想法就是二分法。
下面上花了几天想,2个小时写出来的计算和证明过程。
![](http://dl2.iteye.com/upload/attachment/0104/2990/60641667-5be3-38e8-85b3-38fc8412d02a.jpg)
![](http://dl2.iteye.com/upload/attachment/0104/2992/a5a941bc-327b-38fc-98d6-ad80e025585e.jpg)
![](http://dl2.iteye.com/upload/attachment/0104/2998/984e37d4-b166-3a3d-a3d2-42247589d778.jpg)
总结:
1. 一般log(n)的方法,可以优先考虑二分法。
2. 一定要通过严格的数学证明,才能保证算法的正确性,在没有证明之前,通过脑子想(当然自己脑子差)会有很多错误,导致我提交了好多错误的答案,导致这道题的成功率极低。
3. 学会了反证法。用反证法来证明算法的正确性。
4. 通过归纳法来得到一般规律,并且得到递归到最小处理处理的情况。
5. 在需要列举情况的时候,需要用到排列组合,来对所有情况进行判断。(高中的数学啊,还是需要加强)
下面上代码:(流程还没有优化,可以进入不合并一些流程)