力扣热题100 第四题

int min(int a,int b){
    if(a>b)
      return b;
    else{
         return a;
    }
  }
//二分法找第k个数
double GetKValue(int* nums1, int nums1Size, int* nums2, int nums2Size, int k){
    int start1=0;
    int start2=0;

    while(true){
        if(start1==nums1Size){
            return nums2[start2+k-1];
        }
        if(start2==nums2Size){
            return nums1[start1+k-1];
        }
        if(k==1){
            return min(nums1[start1+k-1],nums2[start2+k-1]);
        }
        int mid=k/2;
        int newstart1=min(start1+mid,nums1Size)-1;
        int newstart2=min(start2+mid,nums2Size)-1;
        if(nums1[newstart1]<nums2[newstart2]){ 
            k-=(newstart1-start1+1);  //k-(新边界-旧边界+1),实际上是把k减半,为下次二分做准备 
            start1=newstart1+1;      //左指针指向新边界
        }
        else{
            k-=(newstart2-start2+1);
            start2=newstart2+1;
        }

  }
}

作者:pan-zheng-qi

链接:https://leetcode.cn/problems/median-of-two-sorted-arrays/solution/by-pan-zheng-qi-na33/

来源:力扣(LeetCode)

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值