2021.07.22力扣刷题(二分/优先队列)

题目: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;
        }
    }
};

思路二是二分查找,因为两个数组分别是有序的,所以我们能够根据中位数所在的位置,分别维护两个指针,然后计算出中位数即可

上一篇:leetcode刷题 04_寻找两个正序数组的中位数


下一篇:UEditor-从客户端(editorValue="

asd

")中检测到有潜在危险的 Request.Form 值。