zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    最大公约数
    九宫格
    Hanoi双塔问题(简单的枚举)
    最高分
    盒子
    CodeForces Round #303 Div. 2
    关于“被密码保护”的文章
    【学习】组合数的递推公式
    [FZYZOJ 1821] 一道果题
    [FZYZOJ 1889] 厨房救济
  • 原文地址:https://www.cnblogs.com/573177885qq/p/5492407.html
Copyright © 2011-2022 走看看