好~,自不量力的看了个困难题,
第一眼,就这?暴力通通解决
第二眼,还要求时间复杂度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;
}
};
被赶走,下次再看这道题。。。。。。