leetcode:4. 寻找两个正序数组的中位数(困难,二分)

it2023-11-19  71

题目:

分析:

学习题解的一种寻找两个有序数组第k小的数字,思路很好理解。

不多说,也挺好理解的,重复这个过程即可。

算是一遍写出,代码能力确实有了提高:

class Solution { public: double f(int c1,int c2,vector<int> n1,vector<int> n2,int k) {//寻找n1的从c1开始,n2的从c2开始,(包含c1,c2),共同的第k小的数字。 if(c1==n1.size()) { return n2[c2+k-1]; } if(c2==n2.size()) { return n1[c1+k-1]; } if(k==1) return min(n1[c1],n2[c2]); int size1=n1.size(); int cc1=min(c1+k/2-1,size1-1); int size2=n2.size(); int cc2=min(c2+k/2-1,size2-1); if(n1[cc1]>n2[cc2]) { return f(c1,cc2+1,n1,n2,k-(cc2-c2)-1); } return f(cc1+1,c2,n1,n2,k-(cc1-c1)-1); } double findMedianSortedArrays(vector<int>& n1, vector<int>& n2) { if((n1.size()+n2.size())%2==1) { return f(0,0,n1,n2,(n1.size()+n2.size()+1)/2); } return (f(0,0,n1,n2,(n1.size()+n2.size()+1)/2)+f(0,0,n1,n2,(n1.size()+n2.size()+1)/2+1))/2; } };
最新回复(0)