zoukankan      html  css  js  c++  java
  • Leetcode | Median of Two Sorted Arrays

    There are two sorted arrays A and B of size m and n respectively. Find the median of the two sorted arrays. The overall run time complexity should be O(log (m+n)).

    第一次看到的时候做不出来,看了答案之后到今天重做,还是不会。

    整体思路就是把求中位数转换为求在两个sorted array里求第k个数。如果(m+n)%2=0,那么就是求第m + n) / 2和第m + n) / 2 + 1个数的平均数。

    如果(m+n)%2!=0,那么就是求第m + n) / 2 + 1个数。

    如图,如果m/2+n/2+1>=k的时候,那么第k个数一定是在sec1,sec3之中或者A[m/2],A[n/2]。此时如果A[m/2]>=B[n/2],那么第k个数一定不在sec2中。(因为在sec2中的数已经比sec1和sec3都大了。)如果A[m/2]<B[n/2],那么第k个数一定不在sec4中。

    如果m/2+n/2+1<k,那么第k个数不可能在sec1或者sec3中。如果A[m/2]<B[n/2],那么第k个数一定不在sec1。如果A[m/2]>=B[n/2],第k个数一定不在sec3。

    当m=0时,也就是A为空,那么第k个数一定是B的第一个。n=0同理。

    当k=1时,也就是说第一个数,那么就是两个sorted array第一个项的最小值。

     1 class Solution {
     2 public:
     3     double findMedianSortedArrays(int A[], int m, int B[], int n) {
     4         if ((m + n) %2 == 0) {
     5             return (getKthNum(A, m, B, n, (m + n) / 2) + getKthNum(A, m, B, n, (m + n) / 2 + 1)) / 2.0;
     6         } else {
     7             return getKthNum(A, m, B, n, (m + n) / 2 + 1);
     8         }
     9     }
    10     
    11     int getKthNum(int A[], int m, int B[], int n, int k) {
    12         if (m <= 0) return B[k - 1];
    13         if (n <= 0) return A[k - 1];
    14         if (k <= 0) return min(A[0], B[0]);
    15         
    16         if (m / 2 + n / 2 + 1 >= k) {
    17            if (A[m / 2] >= B[n / 2]) {
    18                return getKthNum(A, m / 2, B, n, k);
    19            } else {
    20                return getKthNum(A, m, B, n / 2, k);
    21            }
    22         } else {
    23             if (A[m / 2] >= B[n / 2]) {
    24                 return getKthNum(A, m, B + n / 2 + 1, n - n / 2 - 1, k - n / 2 - 1);
    25             } else {
    26                 return getKthNum(A + m / 2 + 1, m - m / 2 - 1, B, n, k - m / 2 - 1);
    27             }
    28         }
    29     }
    30 };
  • 相关阅读:
    经典滤波器设计
    算法学习专栏简介
    算法学习专栏简介
    压缩感知及实验分析
    压缩感知及实验分析
    《数学之美》之谈谈搜索引擎反作弊与权威性问题
    《数学之美》之谈谈搜索引擎反作弊与权威性问题
    查找searching
    查找searching
    《数学之美》之谈谈密码学
  • 原文地址:https://www.cnblogs.com/linyx/p/3718684.html
Copyright © 2011-2022 走看看