LeetCode练习 两个排序数组的中位数

题目是已知两个排序数组,求它们的中位数,时间复杂度要求是Ologm+n))。

想了想,还是排序适合我。

#include "stdafx.h"

#include "cctype"

#include "iostream"

#include<math.h>

#include <ctime>

#include "afxtempl.h"

#include "singleLink.h"

using namespace std;

#define random(a,b) (rand()%(b-a+1)+a)

int _tmain(int argc, _TCHAR* argv[])

{

       srand((unsigned)time(NULL));

       intoneNum=random(15,20);

       inttwoNum=random(20,25);

       int*arrayone;

       arrayone=(int*)malloc(oneNum*sizeof(int));

       int*arraytwo;

       arraytwo=(int*)malloc(twoNum*sizeof(int));

       for(int i=0;i<oneNum;i++)

       {

              if(i==0)

              {

                     arrayone[0]=random(1,9);

              }

              else

                     arrayone[i]=arrayone[i-1]+random(0,9);

              printf("%d",arrayone[i]);

       }

       printf("\n");

       for(int i=0;i<twoNum;i++)

       {

              if(i==0)

              {

                     arraytwo[0]=random(1,9);

              }

              else

                     arraytwo[i]=arraytwo[i-1]+random(0,9);

 

              printf("%d",arraytwo[i]);

       }

      

       intpos=0;

       intonepos=0;

       inttwopos=0;

       int*arraysum;

       arraysum=(int*)malloc((oneNum+twoNum)*sizeof(int)); 

       while(pos<(oneNum+twoNum))

       {

              if((onepos<oneNum)&&(twopos<twoNum))

              {

                     if(arrayone[onepos]<=arraytwo[twopos])

                     {

                            arraysum[pos]=arrayone[onepos];

                            onepos++;

                     }

                     elseif (arrayone[onepos]>arraytwo[twopos])

                     {

                            arraysum[pos]=arraytwo[twopos];

                            twopos++;

                     }

              }

              elseif (onepos<oneNum)

              {

                     arraysum[pos]=arrayone[onepos];

                     onepos++;

              }

              elseif (twopos<twoNum)

              {

                     arraysum[pos]=arraytwo[twopos];

                     twopos++;

              }

              pos++;

       }

       printf("\n   onenum  %d,twonum    %d\n",oneNum,twoNum);

       doubletmp=(arraysum[(oneNum+twoNum-1)/2]+arraysum[(oneNum+twoNum)/2])/2.0;

       for(int i=0;i<oneNum+twoNum;i++)

       {

              printf("%d,%d  ",i+1,arraysum[i]);

              if(i%6==5)

                     printf("\n");

       }

       printf("\n %f  ",tmp);   

       free(arrayone);

       free(arraytwo);

       free(arraysum);

       system("PAUSE");

              return 0;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值