首页 > 其他 > 详细

leetcode 之Median of Two Sorted Arrays(五)

时间:2016-05-14 13:54:32      阅读:239      评论:0      收藏:0      [点我收藏+]

技术分享

                  找两个排好序的数组的中间值,实际上可以扩展为寻找第k大的数组值。

                参考下面的思路,非常的清晰:

               技术分享

                  代码:

                            

技术分享
 double findMedianofTwoSortArrays(int A[], int B[], int m, int n)
      {
          int total = m + n;
          //判断序列长度的奇偶,奇数只有一个中间值,偶数有两个中间值,取平均
          if (total & 0x1)
              return  find_kth(A, m, B, n, total / 2 + 1);
          else
              return (find_kth(A, m, B, n, total / 2) + find_kth(A, m, B, n, total / 2 + 1)) / 2;
      }

int find_kth(int A[], int m, int B[], int n, int k)
    {
        //设定m<=n
        if (m > n)return find_kth(B, n, A, m, k);
        if (m == 0)return B[k - 1];
        if (k == 1)return min(A[0], B[0]);

        //删除掉一部分数据
        int ia = min(k / 2, m), ib = k - ia;
        if (A[ia - 1] < B[ib - 1])
            return find_kth(A + ia, m - ia, B, n, k - ia);
        else if (A[ia - 1]>B[ib - 1])
            return find_kth(A, m, B + ib, m - ib, k - ib);
        else
            return A[ia - 1];
    }
View Code

 

leetcode 之Median of Two Sorted Arrays(五)

原文:http://www.cnblogs.com/573177885qq/p/5492407.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!