Median of Two Sorted Arrays

1、一提到中位数就要考虑数组的个数是奇数还是偶数;
2、涉及到排序数组的求和、求中位数这类的问题都要想到用二分法的思想;
题目:
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)).
找到两个数组所组成的数的中位数。
思路:
1、考虑特殊情况,即有一个数组为空、每个数组只有一个元素;
2、判断m+n是奇数还是偶数,然后进行递归;
3、利用二分的思路,一半一半的进行删除,令

int pa=min(k/2,n);
int pb=k-pa;

用k的一半进行比较,如果前一半比较小,则肯定不符合条件,则递归find(nums1[pa],m-pa,nums2,n,k-pa),反之如果pb比较小则这部分肯定也不符合条件,递归find(nums1,m,nums2[pb],n-pb,k-pb)
代码:

class Solution {
public:
    double find(vector<int> & nums1,int m,vector<int> & nums2,int n,int k)
    {
        if(m<n) return find( nums1,n,nums2,m,k);
        if(n==0) return nums2[k-1];
        if(k==1) return min(nums1[0],nums2[0]);
        int pa=min(k/2,n);
        int pb=k-pa;
        if(nums1[pa-1]>nums2[pb-1]) return find(nums1,m,nums2+pb,n-pb,k-pb);
        else if(nums1[pa-1]<nums2[pb-1]) return find(nums1+pa,m-pa,nums2,n,k-pa);
        else return nums1[pa-1];
    }

    double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
        int m=nums1.size();
        int n=nums2.size();
        int total=n+m;

        if(total%2)
        return find(nums1,m,nums2,n,total/2+1);
        else return (find(nums1,m,nums2,n,total/2)+find(nums1,m,nums2,n,total/2+1))/2;
    }
};

但是出现了如下的错误,不知道怎么改,希望大家能帮助改正;
Line 10: no matching function for call to ‘Solution::find(std::vector&, int&, __gnu_cxx::__alloc_traits

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值