4.寻找两个正序数组的中位数

17 篇文章 0 订阅

好~,自不量力的看了个困难题,
第一眼,就这?暴力通通解决
第二眼,还要求时间复杂度O(log (m+n))?
想了想,有了点二分查找的意思,但是,奇数偶数感觉脑子有点不够用,看看题解,好家伙,看也看不懂



本来写着上面的都想放弃了,以后再看,但是,第一个hard就放弃不太好吧,虽然这次以后大概率很长时间不会碰hard了
虽然照着瞧出来了,但总感觉还差点意思

class Solution {
public:
    double get(vector<int>& nums1, vector<int>& nums2,int k){
        int index1=0,index2=0;//形式边界
        int m=nums1.size();
        int n=nums2.size();//大小
        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);//每次都要加上k/2-1,并保证不会溢出
            int newindex2=min(index2+k/2-1,n-1);
            int p1=nums1[newindex1];
            int p2=nums2[newindex2];
            if(p1<=p2){
                k-=newindex1-index1+1;//k的实际减小大小,+1是因为当前边界值也被排除
                index1=newindex1+1;//排除当前边界值
            }
            else{
                k-=newindex2-index2+1;
                index2=newindex2+1;
            }
        }
    }
    double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
        int k=nums1.size()+nums2.size();
        if(k%2==1)
            return get(nums1,nums2,(k+1)/2);
        else
            return(get(nums1,nums2,k/2+1)+get(nums1,nums2,k/2))/2.0;
    }
};

被赶走,下次再看这道题。。。。。。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值