class Solution {
public:
#define INF 0x3f3f3f3f
int find(vector<int>&a,vector<int>&b,int k){
int n=a.size(),m=b.size(),p1=0,p2=0;
while(k){
if(p1==n) return b[p2+k-1];
if(p2==m) return a[p1+k-1];
if(k==1) return min(a[p1],b[p2]);
int np1=min(n-1,p1+k/2-1),np2=min(m-1,p2+k/2-1);
if(a[np1]<b[np2]) k-=(np1-p1+1),p1=np1+1;
else k-=(np2-p2+1),p2=np2+1;
}
return -1;
}
double findMedianSortedArrays(vector<int>& a, vector<int>& b) {
int len=a.size()+b.size();
if(len&1) return find(a,b,len/2+1);
else return 0.5*(find(a,b,len/2)+find(a,b,len/2+1));
}
};
leetcode 4. 寻找两个正序数组的中位数
最新推荐文章于 2022-11-11 14:08:46 发布