• #Leetcode# 4. Median of Two Sorted Arrays


    https://leetcode.com/problems/median-of-two-sorted-arrays/

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

    You may assume nums1 and nums2 cannot be both empty.

    Example 1:

    nums1 = [1, 3]
    nums2 = [2]
    
    The median is 2.0
    

    Example 2:

    nums1 = [1, 2]
    nums2 = [3, 4]
    
    The median is (2 + 3)/2 = 2.5

    代码:

    class Solution {
    public:
        double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
            vector<int> v;
            for(int i = 0; i < nums1.size(); i ++)
                v.push_back(nums1[i]);
            for(int i = 0; i < nums2.size(); i ++)
                v.push_back(nums2[i]);
            
            sort(v.begin(), v.end());
            double ans = 0.0;
            if(v.size() % 2 == 0)
                ans = 1.0 * (v[v.size() / 2 - 1] + v[v.size() / 2 + 1 - 1]) / 2;
            else ans = 1.0 * v[(v.size() + 1) / 2 - 1];
            
            return ans;
        }
    };
    

     

    二分

    class Solution {
    public:
        double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
            int m = nums1.size(), n = nums2.size();
            if (m < n) return findMedianSortedArrays(nums2, nums1);
            if (n == 0) return ((double)nums1[(m - 1) / 2] + (double)nums1[m / 2]) / 2.0;
            int left = 0, right = n * 2;
            while (left <= right) {
                int mid2 = (left + right) / 2;
                int mid1 = m + n - mid2;
                double L1 = mid1 == 0 ? INT_MIN : nums1[(mid1 - 1) / 2];
                double L2 = mid2 == 0 ? INT_MIN : nums2[(mid2 - 1) / 2];
                double R1 = mid1 == m * 2 ? INT_MAX : nums1[mid1 / 2];
                double R2 = mid2 == n * 2 ? INT_MAX : nums2[mid2 / 2];
                if (L1 > R2) left = mid2 + 1;
                else if (L2 > R1) right = mid2 - 1;
                else return (max(L1, L2) + min(R1, R2)) / 2;
            }
            return -1;
        }
    };
    

      

     

    第一道 hard 题目 嘻嘻嘻

  • 相关阅读:
    转:Jenkins自动化部署入门详细教程
    详解MySQL锁
    常见的内存溢出与解决办法
    read IEEE Standard for verilog(1)
    verilog之状态机
    quantus18的signaltap逻辑分析仪
    英语文档之关键词统计
    cadence软件画版图操作
    英语文档之vivado界面
    verilog之wire和reg
  • 原文地址:https://www.cnblogs.com/zlrrrr/p/9994181.html
Copyright © 2020-2023  润新知