您的位置:首页 > 其它

Median of Two Sorted Arrays

2015-11-25 10:15 260 查看
题目:

There are two sorted arrays nums1 and nums2 of size m and n respectively. Find the median of the two sorted arrays. The overall run time complexity should be O(log (m+n)).

主要思想:

在两个数组中查找第k个元素时(k从1开始),若nums1[k/2-1]>nums2[k/2-1],这说明在数组nums2中,前k/2个元素(数组从nums2[0]开始)中肯定不包含第k个元素,将这前k/2个元素剔除,在num1和剩余的nums2元素中查找第k-k/2个元素.

代码:

double find_the_Kth_element(int* nums1, int nums1Size, int* nums2, int nums2Size,int k){// k从1开始,而不是0开始
if(nums1Size<nums2Size)// 默认是数组1的长度大于数组2的
return find_the_Kth_element(nums2, nums2Size, nums1,nums1Size,k);
if(nums2Size==0)
return nums1[k-1];
if(k==1)
return nums1[0]<nums2[0]?nums1[0]:nums2[0]; // min()
int partitionPosition2=k/2<nums2Size?k/2:nums2Size;// min()
int partitionPosition1=k-partitionPosition2; //这一步很巧妙

if(nums1[partitionPosition1-1]>nums2[partitionPosition2-1])
return find_the_Kth_element(nums1, nums1Size,
nums2+partitionPosition2,nums2Size-partitionPosition2,k-partitionPosition2);
else if( nums1[partitionPosition1-1]<nums2[partitionPosition2-1])
return find_the_Kth_element(nums1+partitionPosition1, nums1Size-
partitionPosition1, nums2,nums2Size,k-partitionPosition1);
else return nums1[partitionPosition1-1];
}
double findMedianSortedArrays(int* nums1, int nums1Size, int* nums2, int nums2Size) {
int total=(nums1Size+nums2Size);
if(total&0X1)
return find_the_Kth_element(nums1, nums1Size, nums2, nums2Size,total/2+1);
else return (find_the_Kth_element(nums1, nums1Size, nums2, nums2Size,total/2)+
find_the_Kth_element(nums1, nums1Size, nums2, nums2Size,total/2+1))/2;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: