leetcode4. Median of Two Sorted Arrays

从两个排好序的数组中取得中位数,那么当个数为偶数的话就是最中间两个数的平均值了,否则的话就是最中间的数。 那么如何取得最中间的数呢?

考虑新建一个函数findKth表示在这些中间寻找第k个数的,那么分别从nums1的i起始位置和nums2的j起始位置来检索的,考虑特殊情况下的返回值的。以及利用递归来比较在两个不同数组中的可能值来进行递归返回。

 

class Solution {
public:
    double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
        int tot=nums1.size()+nums2.size();
        if(tot%2==1){
            return findKth(nums1,0,nums2,0,tot/2+1);
        }else{
            return (findKth(nums1,0,nums2,0,tot/2)+findKth(nums1,0,nums2,0,tot/2+1))/2.0;
        }
    }
    double findKth(vector<int>& nums1,int i, vector<int>& nums2,int j, int k){
        if(nums1.size()-i>nums2.size()-j) return findKth(nums2,j,nums1,i,k);
        if(nums1.size()==i) return nums2[j+k-1];
        if(k==1) return min(nums1[i],nums2[j]);
        int pa=min(int(nums1.size()),i+k/2), pb=j+k-pa+i;
        if(nums1[pa-1]<nums2[pb-1]){
            return findKth(nums1,pa,nums2,j,k-pa+i);
        }else if(nums1[pa-1]>nums2[pb-1]){
            return findKth(nums1,i,nums2,pb,k-pb+j);
        }else{
            return nums1[pa-1];
        }
    }
};

 

posted on 2018-09-11 15:28  昔风不止,唯有努力生存  阅读(90)  评论(0编辑  收藏  举报

导航