LeetCode 两个排序数组的中位数
程序员文章站
2024-03-16 12:46:40
...
分治思想 并运用递归进行二分搜素 时间复杂度为log(m+n)
class Solution {
public:
double findMedianSortedArrays(vector<int>& a, vector<int>& b) {
int m=a.size();
int n=b.size();
if(m>n)
return findMedianSortedArrays(b,a);
int i=0;int j=0;int s=(m+n+1)/2;
findij(a,b,0,m,i,j,s);
int max=0;
if(i==0)max=b[j-1];
else if(j==0)max=a[i-1];
else
max=a[i-1]>b[j-1]?a[i-1]:b[j-1];
if((m+n)%2==1)return max;
int min=0;
if(i==m)min=b[j];
else if(j==n)min=a[i];
else
min=a[i]<b[j]?a[i]:b[j];
return (max+min)/2.0;
// return 0;
}
void findij(vector<int>& a,vector<int>& b,int imin,int imax,int &i,int &j,int s)
{
i=(imin+imax)/2;
j=s-i;
if(i < imax&&b[j-1]>a[i])
return findij(a,b,i+1,imax,i,j,s);
else if(i > imin &&a[i-1]>b[j])
return findij(a,b,imin,i-1,i,j,s);
else
return;
}
};
上一篇: 【算法基础】需要排序的最短子数组长度
下一篇: 两个排序数组的中位数