zoukankan      html  css  js  c++  java
  • LeetCode 4 Median of Two Sorted Array

    There  are two sorted arrays A and B 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到的数,但是这样算法的复杂度是o(nlogn),显然不符合题目的要求。

    参考http://blog.csdn.net/zxzxy1988/article/details/8587244中的解法:

    假设A,B两个数组元素都大于k/2。可以比较A[k/2]和B[k/2]

    (1)A[k/2-1] < B[k/2-1] 此时可以判断A[0]~A[k/2]均比最终要找的median要小,可以去掉这部分元素。

    (2)A[k/2-1] > B[k/2-1]此时可以判断B[0]~B[k/2]均比最终要找的median要小,可以去掉这部分元素。

    (3)A[k/2-1] = B[k/2-1]此时判断要找的median就是A[k/2-1]orB[k/2-1].

    使用上面的结论,还要考虑边界情况。

    实现代码如下

    class Solution {
    public:
       double findMedianSortedArrays(int a[], int m, int b[], int n)
    	{
    		int total = m + n;
    		if(total & 0x1)
    		{
    			return findkth(a, m, b, n, total / 2 + 1);
    		}
    		else
    		{
    			return (findkth(a, m, b, n, total / 2) +findkth(a, m, b,n, total /2 + 1)) / 2;
    		}
    	}
    	double findkth(int a[], int m, int b[], int n, int k)
       {
    	if(m > n)
    		return findkth(b, n, a, m, k);
    	if(m == 0)
    		return b[k-1];
    	if(k <= 1)
    		return min(a[0], b[0]);
    	int idxA = min(k/2, m);
    	int idxB = k - idxA;
    	if(a[idxA - 1] < b[idxB-1])
    	{
    		return findkth(a+idxA, m-idxA, b, n, k- idxA);
    	}
    	else if(b[idxB-1] < a[idxA-1])
    	{
    		return findkth(a, m, b+ idxB, n - idxB, k - idxB );
    	}
    	else
    		return a[idxA - 1];
       }
    };
    

      使用的迭代,考虑到求解的方便使用:

    if(m > n)
    return findkth(b, n, a, m, k);//这句使得后面具体结果讨论省了一半,32个赞
    if(m == 0)
    return b[k-1];
    if(k <= 1)
    return min(a[0], b[0]);

    对边界情况进行讨论。

    多看多学习,不管怎样,这是个好时代,加油。

  • 相关阅读:
    电子书、API、帮助文档 链接收藏
    .net上传图片我自己的可下载资源
    VS2012+EF5学习MVC4(二)
    VS2012+EF5学习MVC4(三)
    MVC 3.0 的新特性
    最受欢迎的ASP.NET的CMS下载
    简易甘特图 .net javascript
    VS2010+EF Code First 4.1学习MVC3(三)
    winform WebBrowser 文件下载拦截 获取文件本地保存路径
    一次偶遇 IOException
  • 原文地址:https://www.cnblogs.com/bestwangjie/p/4411066.html
Copyright © 2011-2022 走看看