题目描述:给定两个大小分别为 m
和 n
的正序(从小到大)数组 nums1
和 nums2
。请你找出并返回这两个正序数组的 中位数 。
题解:采用双指针的方式,p1指向数组1,p2指向数组2,一次比较p1,p2,将较小的值放入新开辟的数组中,然后递增,直到两指针都超出边界
double findMedianSortedArrays(int* nums1, int nums1Size, int* nums2, int nums2Size){
int* stack = (int*)malloc(sizeof(int)*(nums1Size+nums2Size));
int p1=0,p2=0,stacksize=0;
double mid = 0;
while(p1<nums1Size||p2<nums2Size){
if(p1>=nums1Size)stack[stacksize++] = nums2[p2++];
else if(p2>=nums2Size)stack[stacksize++] = nums1[p1++];
else{
stack[stacksize++] = nums1[p1]>=nums2[p2]? nums2[p2]:nums1[p1];
if(nums1[p1]>=nums2[p2])p2++;
else p1++;
}
}
mid = (nums1Size+nums2Size)%2? stack[(int)(nums1Size+nums2Size)/2]:(double)(stack[(int)(nums1Size+nums2Size)/2-1]+stack[(int)(nums1Size+nums2Size)/2])/2;
return mid;
}