从两个已排序的数组中找到中位数,要求时间复杂度为log(m+n);

苦逼…各种被虐…C/C++、Python,三个版本。

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)).

Example 1:

Example 2:

 

题目思路:

因为是log(m+n),自然想到二分。

假设找到第k小元素(中位数则 k = len/2 —暂不纠结正确好不,反正我知道不对)

假设A的长度小于B的长度 – 如果相反就反过来好了。

pa = min(k/2, lenA)

pb = k – pa

这样分,可以让数组恰好每次去掉一半。

在两个数组中根据pa和pb…将数组分为四部分:(用了python的切片表达)

A[:pa],A[pa:],B[:pb],B[pb:]

然后比较A[pa-1] 和 B[pb-1] 的值,决定去掉其中两块。

为什么这么分,这么删除,自己思考 – 而且一定要思考。

 

python代码如下:

这个是最先写的,被虐的很爽。

方法不够快,但是很简洁。

我觉得可能是因为切片造成速度太慢。考虑要不要像C++一样传递下标。

嗯,暂时不优化,若觉得有优化需求可以留言。

 

给出C++代码如下,我不推荐在这里用vector,真XX麻烦!

所以如果是C++读者,我建议用下面的C代码最好不过了。

 

给出C语言代码如下:

 

不要问我为啥C/C++代码里咋有python注释。

其他疑问可以留言,感谢阅读。

【LeetCode】4. Median of Two Sorted Arrays
Tagged on:             
0 0 投票数
Article Rating
订阅评论
提醒

0 评论
内联反馈
查看所有评论