• Median of Two Sorted Arrays(OO)


    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. median为中位数,如果为偶,则为中间两数平均值

    2. [],[2,3] 应该是2.5

    3. [1] [1] 应该是1

    4. [2,2] [2]应该是2

    真是考察逻辑缜密程序

    错误集:

    1. 

    for(i=0,j=0;i<m&&j<n;)//这里应该是&&,而不是逗号
    2. 
    return B[(m+n)/2 - m];//当为单并且走完一个数组时,返回的值,不能加1

    3. 

    当m+n为偶数时,得到numbb时可直接返回了

    class Solution {
    public:
        double findMedianSortedArrays(int A[], int m, int B[], int n)
        {
            if(m==0)
            {
                if(n%2==1)
                    return B[n/2];
                else
                    return (B[n/2-1]+B[n/2])/2.0;
            }
            if(n==0)
            {
                if(m%2==1)
                    return A[m/2];
                else
                    return (A[m/2-1]+A[m/2])/2.0;
            }
           double mediasum;
           int cnt=0;
           int i,j;
            int numba, numbb;
           if((m+n)%2==1)
           {
              for(i=0,j=0;i<m&&j<n;)
             {
               if(A[i]<=B[j])
               {
                   cnt++;
                   if(cnt==(m+n)/2+1)
                    return A[i];
                    i++;
               }
               else
               {
                   cnt++;
                   if(cnt==(m+n)/2+1)
                    return B[j];
                    j++;
               }
             }
             if(i==m)
                return B[(m+n)/2 - m];
             if(j==n)
                return A[(m+n)/2 - n];
           }
          
           else
           {
               for(i=0,j=0;i<m&&j<n;)
             {
               if(A[i]<=B[j])
               {
                   cnt++;
                   if(cnt==(m+n)/2)
                    numba=A[i];
                    if(cnt==(m+n)/2+1)
                    {
                        numbb=A[i];
                        return (numba+numbb)/2.0;
                    }
                    
                    i++;
               }
               else
               {
                   cnt++;
                   if(cnt==(m+n)/2)
                    numba=B[j];
                    if(cnt==(m+n)/2+1)
                    {
                        numbb=B[j];
                        return (numba+numbb)/2.0;
                    }
                    j++;
               }
             }
             if(i==m)
             {
                 while(j<n)
                    {
                        cnt++;
                        if(cnt==(m+n)/2)
                            numba=B[j];
                        if(cnt==(m+n)/2+1)
                        {
                            numbb=B[j];
                             return (numba+numbb)/2.0;
                        }
                            
                         j++;  
                    }
             }
             if(j==n)
             {
                 while(i<m)
                    {
                         
                        cnt++;
                        if(cnt==(m+n)/2)
                            numba=A[i];
                        if(cnt==(m+n)/2+1)
                        {
                             numbb=A[i];
                             return (numba+numbb)/2.0;
                        }
                           
                        i++;
                       
                    }
                 
             }
             mediasum = (numba+numbb)/2.0;
           }
          return mediasum;
        }
    };


    每天早上叫醒你的不是闹钟,而是心中的梦~
  • 相关阅读:
    还得还得学啊
    感觉自己写的东西很死板啊
    好烦啊,不知道选哪个?
    222
    111
    愁人啊
    ssm+ajax实现登陆
    ssm框架搭建
    抽象类与接口
    代理设计模式
  • 原文地址:https://www.cnblogs.com/vintion/p/4116917.html
Copyright © 2020-2023  润新知