zoukankan      html  css  js  c++  java
  • 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)).

    思路简单,就是写起来比较麻烦。

    几个注意点:

    1,其中一个数组为空的情况

    2,两个数组的排列顺序,从大到小或者从小到大

    3,其中一个数组全在中位数(median)之前的情况

    4,奇偶数的讨论。

     1 class Solution {
     2 public:
     3     double findMedianSortedArrays(int A[], int m, int B[], int n) {
     4     if(!m)
     5     {
     6         if(n%2)
     7             return (double)B[n/2];
     8         else
     9             return (double)(B[n/2]+B[n/2-1])/2;
    10     }
    11     if(!n)
    12     {
    13         if(m%2)
    14             return (double)A[m/2];
    15         else
    16             return (double)(A[m/2]+A[m/2-1])/2;
    17     }
    18     bool aSort = true;
    19     bool bSort = true;
    20     int i = 0;
    21     int j = 0;
    22     if (A[0] > A[m-1]){
    23         i = m-1;
    24         aSort = false;
    25     }
    26     if (B[0] > B[n-1]){
    27         j = n-1;
    28         bSort = false;
    29     }
    30     int middle;
    31     int flag = 0;
    32     while(flag < (m+n+1)/2)
    33     {
    34         if(i<0 || i>m-1)
    35         {
    36             middle = B[j];
    37             iterat(bSort,&j);
    38             ++flag;
    39         }
    40         else if(j<0 || j> n-1)
    41         {
    42             middle = A[i];
    43             iterat(aSort,&i);
    44             ++flag;
    45         }
    46         else if(A[i]<B[j]){
    47             middle = A[i];
    48             iterat(aSort,&i);
    49             ++flag;
    50         }
    51         else{
    52             middle = B[j];
    53             iterat(bSort,&j);
    54             ++flag;
    55         }
    56     }
    57     if((m+n)%2)
    58         return middle*1.0;
    59     else{
    60         if(i>m-1 || i<0)
    61         {
    62             return (middle+B[j])/2.0;
    63         }
    64         else if(j>n-1 || j<0)
    65         {
    66             return (middle+A[i])/2.0;
    67         }
    68         else
    69             return (middle+(A[i]<B[j]?A[i]:B[j]))/2.0;
    70     }
    71 }
    72     void iterat(bool sort,int* p)
    73     {
    74     if(sort)
    75         ++*p;
    76     else
    77         --*p;
    78     } 
    79 };

    写得比较长。(┬_┬)

  • 相关阅读:
    R语言:文本(字符串)处理与正则表达式
    RStudio版本管理 整合Git
    GIT 图形化操作指南
    RStudio 断点调试 进入for循环语句调试
    安装python Matplotlib 库
    win7 32位安装 python 及Numpy、scipy、matplotlib函数包
    ubuntu下hive-0.8.1配置
    我对PageRank的理解及R语言实现
    R 数据类型
    Pig Latin JOIN (inner) 与JOIN (outer)的区别
  • 原文地址:https://www.cnblogs.com/ittinybird/p/4338301.html
Copyright © 2011-2022 走看看