题目:4. 寻找两个正序数组的中位数
题目传送门:https://leetcode-cn.com/problems/median-of-two-sorted-arrays/
思路
看完题目之后,觉得很纳闷,为什么这样题目难度级别是困难???看了题解之后发现大意了,只想出了最最基础的。
我的第一个思路就很暴力,直接使用优先队列合并数组,然后计算出中位数即可,直接上代码
class Solution {
public:
double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
int l1 = nums1.size();
int l2 = nums2.size();
int sum = l1+l2;
int flag = 0;
int pos = 0,pos1 = 0,pos2 = 0;
priority_queue<int> q;
if(sum&1)//ji shu
{
pos = sum/2;
flag = 1;
}
else//ou shu
{
pos1 = sum/2-1;
pos2 = sum/2;
}
int time = 0;
for(int i = 0;i<nums1.size();i++)
{
q.push(nums1[i]);
}
for(int i = 0;i<nums2.size();i++)
{
q.push(nums2[i]);
}
if(flag==1)
{
while(time!=pos&&!q.empty())
{
time++;
q.pop();
}
return q.top();
}
else
{
while(time!=pos1&&!q.empty())
{
time++;
q.pop();
}
int x1 = q.top();
q.pop();
int x2 = q.top();
return (double)(x1+x2)/2;
}
}
};
思路二是二分查找,因为两个数组分别是有序的,所以我们能够根据中位数所在的位置,分别维护两个指针,然后计算出中位数即可