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)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。