leetcode 之Median of Two Sorted Arrays(五)

                  找两个排好序的数组的中间值,实际上可以扩展为寻找第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

 

posted @ 2016-05-14 13:31  牧马人夏峥  阅读(140)  评论(0)    收藏  举报