zoukankan      html  css  js  c++  java
  • LeetCode 2.Median of Two Sorted Arrays

    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)).

    Solution

     1 #include<iostream>
     2 #include<vector>
     3 using namespace std;
     4 class Solution {
     5 public:
     6 
     7     double findMedianSortedArrays(int A[], int m, int B[], int n) 
     8     {
     9         int  findNum=0;
    10         if((m+n)%2==0)
    11             findNum=2;
    12         else
    13             findNum=1;
    14 
    15         int leftOffsetA=0,leftOffsetB=0;
    16         int rightOffsetA=0,rightOffsetB=0;
    17         while(leftOffsetA+leftOffsetB+rightOffsetA+rightOffsetB!=m+n-findNum)
    18         {
    19             
    20             if(leftOffsetA==m|| rightOffsetA==m)
    21             {
    22                 //左右端都在B中
    23                 int halfLenthOfPartB=(n-1-leftOffsetB-rightOffsetB)/2;
    24                 leftOffsetB+=halfLenthOfPartB;
    25                 rightOffsetB+=halfLenthOfPartB;
    26                 break;
    27             }
    28             else if(leftOffsetB==n|| rightOffsetB==n)
    29             {
    30                 //左右端都在A中
    31                 int halfLenthOfPartA=(m-1-leftOffsetA-rightOffsetA)/2;
    32                 leftOffsetA+=halfLenthOfPartA;
    33                 rightOffsetA+=halfLenthOfPartA;
    34                 break;
    35             }
    36             else
    37             {
    38                 //左端还分别在A、B中
    39                 if(A[leftOffsetA]<B[leftOffsetB])
    40                     leftOffsetA++;
    41                 else
    42                     leftOffsetB++;
    43 
    44                 if(A[m-1-rightOffsetA]>B[n-1-rightOffsetB])
    45                     rightOffsetA++;
    46                 else
    47                     rightOffsetB++;
    48             }
    49         }
    50     //    cout<<"leftOffsetA:"<<leftOffsetA<<" rightOffsetA"<<rightOffsetA<<endl;
    51     //    cout<<"leftOffsetB:"<<leftOffsetB<<" rightOffsetB"<<rightOffsetB<<endl;
    52         
    53         //取出两段截断的int数据
    54         vector<int> ivec;
    55         for(int index_i=leftOffsetA;index_i<=m-1-rightOffsetA &&index_i<m;index_i++)
    56         {
    57             ivec.push_back(A[index_i]);
    58             //cout<<"A中取出:"<<A[index_i]<<endl;
    59         }
    60         for(int index_i=leftOffsetB;index_i<=n-1-rightOffsetB &&index_i<n;index_i++)
    61         {
    62             ivec.push_back(B[index_i]);
    63             //cout<<"B中取出:"<<B[index_i]<<endl;
    64         }
    65         if(findNum==1)
    66             return ivec[0];
    67         else
    68             return (ivec[0]+ivec[1])/2.0f;
    69         
    70     }
    71 };
  • 相关阅读:
    CentOS下crond定时任务详细介绍
    js随机从数组中取出几个元素
    js复制内容加版权声明代码
    crond不执行原因分析
    2015年最全的移动WEB前端UI框架
    聊聊前端排序的那些事
    Linux下修改Mysql的用户(root)的密码
    SIPp常用脚本之三:UAC
    SIPp常用脚本之二:UAS
    SIPp常用脚本之一:register注册
  • 原文地址:https://www.cnblogs.com/kyokuhuang/p/4190249.html
Copyright © 2011-2022 走看看