力扣算法 4. 寻找两个正序数组的中位数

给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。算法的时间复杂度应该为 O(log (m+n)) 。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述

class Solution {
    
    
public:
   int getKthElement(const vector<int>& nums1, const vector<int>& nums2,int k)
   {
    
    
       int m=nums1.size();
       int n=nums2.size();
       int index1=0,index2=0;
       while(true){
    
    
           if(index1==m){
    
    
               return nums2[index2+k-1];
           }
           if(index2==n){
    
    
               return nums1[index1+k-1];
           }
           if(k==1){
    
    
               return min(nums1[index1],nums2[index2]);
           }
           //正常情况
           int newIndex1=min(index1+k/2-1,m-1);
           int newIndex2=min(index2+k/2-1,n-1);
           int pivot1=nums1[newIndex1];
           int pivot2=nums2[newIndex2];
           if(pivot1<pivot2)
           {
    
    
               k-=newIndex1-index1+1;
               index1=newIndex1+1;
           }
           else
           {
    
    
               k-=newIndex2-index2+1;
               index2=newIndex2+1;
           }

       }
   }
   double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2){
    
    
       int totalLength=nums1.size()+nums2.size();
       if (totalLength%2==1){
    
    
           return getKthElement(nums1,nums2,(totalLength+1)/2);
       }
       else{
    
    
           return(getKthElement(nums1,nums2,totalLength/2)+getKthElement(nums1,nums2,totalLength/2+1))/2.0;
       }
   }

};

猜你喜欢

转载自blog.csdn.net/zhangyuanbonj/article/details/128995925