码迷,mamicode.com
首页 > 其他好文 > 详细

leetcode 之Median of Two Sorted Arrays(五)

时间:2016-05-14 13:57:30      阅读:184      评论: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
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!