zoukankan      html  css  js  c++  java
  • 【LeetCode & 剑指offer刷题】查找与排序题4:Median of Two Sorted Arrays

    【LeetCode & 剑指offer 刷题笔记】目录(持续更新中...)

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

    C++
     
    //方法一:合并,然后计算中值
    //不过时间复杂度为O(m+n),不满足题意
    class Solution
    {
    public:
        double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2)
        {
            int i=0,j=0,k=0;
            int m = nums1.size();
            int n = nums2.size();
            int len = m+n;
            vector<int> temp(len);
            while(i<m&&j<n) //合并,耗时O(m+n)
            {
                temp[k++] = (nums1[i]<nums2[j])? nums1[i++]:nums2[j++];
            }
            while(i<m)
            {
                temp[k++] = nums1[i++];
            }
            while(j<n)
            {
                temp[k++] = nums2[j++];
            }
          
            double mid; //注意这里类型为浮点数,因为可能为小数
            if(len&1)
                mid = temp[(len-1)/2];//长度为奇数时,中值为中间数
            else
                mid = (temp[(len-1)/2]+temp[len/2])/2.0;//长度为偶数时,中值为中间两数平均数
            return mid;
          
          
        }
    };
     
    //方法二:递归,利用二分查找
    //没看懂??
    class Solution
    {
    public:
        int getkth(vector<int>& s, int m, vector<int>& l, int n, int k)
        {
            //让m<=n
            if(m>n) return getkth(l,n,s,m,k);
            if(m==0) return l[k-1];
            if(k == 1) return min(s[0], l[0]);
           
            int i = min(m, k/2),j = min(n,k/2);
            if(s[i-1] > l[j-1]) return getkth(s,m,, n-j, k-j);
            else return getkth(s+i, m-i, l, n, k-i);
            return 0;
        }
           
        double findMedianSortedArrays(vector<int>& a, vector<int>& b)
        {
            int m = a.size();
            int n = b.size();
            int l = (m+n+1) >> 1;
            int r = (m+n+2) >> 1;
            return (getkth(a,m,b,n,l) + getkth(a,m,b,n,r))/2.0;
                  
        }
    };
     
     
     
  • 相关阅读:
    junit测试时,出现java.lang.IllegalStateException: Failed to load ApplicationContext
    Mybatis 3 返回布尔值,需要注意的地方
    mybatis sql in 查询
    在HTML中如何隐藏某段文字具体该怎么实现
    SpringMVC存取Session的两种方法
    spring mvc 使用session
    mybatis入门例子
    Android自定义GifView显示gif动画
    [wxWidgets]_[0基础]_[经常更新进度条程序]
    ASP.NET验证控件
  • 原文地址:https://www.cnblogs.com/wikiwen/p/10225926.html
Copyright © 2011-2022 走看看