4. 寻找两个正序数组的中位数
题目链接:
4. 寻找两个正序数组的中位数
题目描述:
给定两个大小分别为 m
和 n
的正序(从小到大)数组 nums1
和 nums2
。请你找出并返回这两个正序数组的 中位数 。
算法的时间复杂度应该为 O(log (m+n))
。
题目分析:
用双指针合并数组,中位数为中间的一项或两项之和除以2
题解:
double findMedianSortedArrays(int* nums1, int nums1Size, int* nums2, int nums2Size) {int arr[nums1Size+nums2Size];// 当合并后数组元素的个数为单数时,tag等于1,双数时为0int tag = (nums1Size + nums2Size) %2;// 存放中间值的角标int middle = (nums1Size + nums2Size)/2;int count = 0;int i = 0;int j = 0;while(i < nums1Size && j < nums2Size){if(nums1[i] < nums2[j]){arr[count++] = nums1[i++];}else{arr[count++] = nums2[j++];}}while(i < nums1Size){arr[count++] = nums1[i++];}while(j < nums2Size){arr[count++] = nums2[j++];}if((nums1Size == 0 && nums2Size == 1) || (nums1Size == 1 && nums2Size == 0)){return arr[middle];}// 当个数为单数时,返回中间值,为偶数时为arr[middle] + arr[middle-1]除以2if(tag){return arr[middle];}else{return (arr[middle] + arr[middle-1])/2.0;}
}