4. 寻找两个正序数组的中位数
题目链接
这道题要求了时间复杂度为O(log(m+n)),根据对数时间复杂度,可以想到用二分法。
由于我没能用二分法做出,这里引用力扣官方给的算法讲解。
力扣官方题解
看到官方题解中通过二分法找Kth元素,想到topK问题可以用优先队列来做,试了下也可以通过,尽管比官方题解慢了点,但是问题简化了很多。
class Solution {
public:
double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
priority_queue<int, vector<int>, less<int> > q;
unsigned int len1 = nums1.size();
unsigned int len2 = nums2.size();
unsigned int len = len1+len2;
bool flag = 1;
if(len%2 == 0) flag = 0;
len = (len >> 1)+1;
for(int i = 0; i < len1; i++)
{
q.push(nums1[i]);
}
for(int i = 0; i < len2; i++)
{
q.push(nums2[i]);
if(q.size() > len)
q.pop();
}
while(q.size() > len)
{
q.pop();
}
if(flag)
return q.top();
else
{
double a = q.top();
q.pop();
return (a+q.top())/2;
}
}
};
如果对你有帮助的话,请点个赞哦!