(LeetCode)Median of Two Sorted Arrays

来源:互联网 发布:淘知学堂教材全解 编辑:程序博客网 时间:2024/06/15 11:17


给定两个已经排序好的数组,要求在o(log(m+n))的复杂度下求出中间值。

我使用了o(m+n)复杂度的算法原来LeetCode只是考虑算法的正确性。

我的做法如下:

class Solution {public:    double findMedianSortedArrays(int a[], int m, int b[], int n) {         int i,j,k;        i=j=k=0;        int *c=new int [n+m];        while(i+j<m+n){//这里并不需要遍历整个数组只需到一半就可以了。            if(i<m&&j<n){                c[k++]=a[i]<b[j]?a[i++]:b[j++];            }            else {                if(i==m){                    while(j<n)c[k++]=b[j++];                }                else {                    while(i<m)c[k++]=a[i++];                }            }        }        double ans=(double)((m+n)%2)?c[(n+m)>>1]:(c[(((n+m)>>1)-1)]+c[((n+m)>>1)])/2.0;        delete[] c;        return ans;    }};

另外寻找到了根据快排思想而得到的求第k小数的方法可以在o(log(n+m))的复杂度下求出结果。

具体参考:http://blog.csdn.net/yutianzuijin/article/details/11499917/


0 0
原创粉丝点击