题目:4. 寻找两个正序数组的中位数
思路:双指针,时间复杂度0(n+m)。
class Solution {
public:
double findMedianSortedArrays(vector<int>& nums1, vector<int>& nums2) {
int n=nums1.size(),m=nums2.size();
int k1=0,k2=0;//中位数
if((n+m)%2==1){
k1=(n+m)/2;
k2=k1;
}else{
k1=(n+m)/2;
k2=k1-1;
}
int i=0,j=0;//双指针
int ct=0;
double sum=0;//中位数之和
while(ct<=k1||ct<=k2){
int tmp=0;
if(i>=n){
tmp=nums2[j++];
}else if(j>=m){
tmp=nums1[i++];
}else{
if(nums1[i]<nums2[j]){
tmp=nums1[i++];
}else{
tmp=nums2[j++];
}
}
if(ct==k1){
sum+=tmp;
}
if(ct==k2){
sum+=tmp;
}
ct++;
}
return sum/2;
}
};
JAVA版本:
class Solution {
public double findMedianSortedArrays(int[] nums1, int[] nums2) {
int n=nums1.length,m=nums2.length;
int k1=0,k2=0;
if((n+m)%2==1){
k1=(n+m)/2;
k2=k1;
}else{
k1=(n+m)/2;
k2=k1-1;
}
int i=0,j=0;
int ct=0;
double sum=0;
while(ct<=k1||ct<=k2){
int tmp=0;
if(i>=n){
tmp=nums2[j++];
}else if(j>=m){
tmp=nums1[i++];
}else{
if(nums1[i]<nums2[j]){
tmp=nums1[i++];
}else{
tmp=nums2[j++];
}
}
if(ct==k1){
sum+=tmp;
}
if(ct==k2){
sum+=tmp;
}
ct++;
}
return sum/2;
}
}