zoukankan      html  css  js  c++  java
  • Median of Two Sorted Arrays

    Question:

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

    Solution:

     1 double findk(vector<int> nums1,vector<int> nums2,int k)
     2 {
     3     int M=nums1.size();
     4     int N=nums2.size();
     5     if(M>N) return findk(nums2,nums1,k);
     6     else
     7     {
     8         if(nums1.empty())  return nums2[k-1];
     9         if(k==1) return min(nums1[k-1],nums2[k-1]);
    10         int ia=min(k/2,M);
    11         int ib=k-ia;
    12         if(nums1[ia-1]<nums2[ib-1])
    13         {
    14             vector<int> tmp1(nums1.begin()+ia,nums1.end());
    15             vector<int> tmp2(nums2.begin(),nums2.end());
    16             return findk(tmp1,tmp2,k-ia);
    17         }
    18         else if(nums1[ia-1]>nums2[ib-1])
    19         {
    20             vector<int> tmp1(nums1.begin(),nums1.end());
    21             vector<int> tmp2(nums2.begin()+ib,nums2.end());
    22             return findk(tmp1,tmp2,k-ib);
    23         }
    24         else 
    25         {
    26             return nums1[ia-1];
    27         }
    28     }
    29 }
    30 class Solution {
    31 public:
    32     double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2)
    33 {
    34     int M=nums1.size();
    35     int N=nums2.size();
    36     int total=M+N;
    37     if(total%2!=0)
    38         return findk(nums1,nums2,total/2+1);
    39     else
    40         return (findk(nums1,nums2,total/2)+findk(nums1,nums2,total/2+1))/2.0;
    41 }
    42 };

  • 相关阅读:
    JAVA学习日报 8.2
    软件工程书籍《大道至简》读后感
    【CSAPP】第三章 程序的机器级表示
    【算法】KMP
    【经验总结】CodeBlocks使用mingw64
    【C++】指针和函数
    【C++】字符串处理
    【C++】自定义数据类型
    【C++】STL容器
    【C++】STL算法
  • 原文地址:https://www.cnblogs.com/riden/p/4631436.html
Copyright © 2011-2022 走看看