Median of Two Sorted Arrays

题目:
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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值