关闭

[置顶] 2011年计算机联考真题——寻找2个序列的中位数

标签: 计算机考研数据结构中位数
433人阅读 评论(0) 收藏 举报
分类:

这里写图片描述


思路:
设定两个升序序列分别为A与B,中位数分别为a和b。
1)如a=b,则即为所求,算法结束。
2)当a< b时,抛弃A的较小的一般和B的较大的一半,并且舍弃的长度必须相等。
3)当 a > b时,抛弃A的较大的一般和B的较小的一半,并且舍弃的长度必须相等。
重复复进行1,2,3过程,知道两个序列均只含一个元素为止,较小者即为所求。



代码如下:

#include <iostream>
using namespace std;

int Median(int* A,int* B,int n)
{
    int s1 = 0 , d1 = n-1, m1 = 0;
    int s2 = 0 , d2 = n-1, m2 = 0;
    while(s1 != d1 || s2 != d2){
        m1 = (s1+d1) / 2;
        m2 = (s2+d2) / 2;
        if(A[m1] == B[m2]){
            return A[m1];
        }
        if(A[m1] < B[m2]){
            if((s1+d1)%2 == 0){
                s1 = m1;
                d2 = m2;
            }else{
                s1 = m1+1;
                d2 = m2;
            }
        }else{
            if((s2+d2)%2 == 0){
                d1 = m1;
                s2 = m2;
            }else{
                d1 = m1;
                s2 = m2+1;
            }
        }
    }
    return (A[s1]<B[s2])?A[s1]:B[s2]; 
}

void Print(int* A,int n)
{
    for(int i = 0 ; i < n ; i++){
        cout<<A[i]<<" ";
    } 
}

int main()
{
    int A[5] = {11,13,15,17,19};
    int B[5] = {2,4,6,8,20};
    cout<<"第一个数组为:"<<endl;
    Print(A,5);
    cout<<endl;
    cout<<"第二个数组为:"<<endl;
    Print(B,5);
    cout<<endl;
    cout<<"中位数为:";
    int median = Median(A,B,5);
    cout<<median<<endl;

    return 0;
}

截图:
这里写图片描述

1
0
查看评论

2014年计算机联考真题——带权路径长度之和

思路如下: 利用层次遍历的思路,记录每层的层数level,对于该层的每个叶节点的带权路径长度 = data*(level-1) 算法如下: //求叶子节点带权路径长度之和 int WPL(BinaryTree* T){ BinaryTree*...
  • qq_30091945
  • qq_30091945
  • 2017-08-27 13:10
  • 434

寻找两个不等长数组的中位数 Median of Two Sorted Arrays

题目源自于Leetcode。经典好题。 题目: 给出两个有序数组,长度不一定相同,一个是m一个是n,要求给出他们合并在一起之后的数组的中位数。 要求时间复杂度为O(log(m+n)),所以不可以合并数组再找中位数,否则复杂度就是O(m+n)。 数组的中位数 如果有序数组有奇数个元素,那么中位数是...
  • luckyjoy521
  • luckyjoy521
  • 2013-11-10 14:42
  • 3275

下半年计算机技术与软件专业技术资格(水平)考试成绩历年公布时间

下半年计算机技术与软件专业技术资格(水平)考试成绩历年公布时间        2012年下半年计算机技术与软件专业技术资格(水平)考试,已经顺利完成,尘埃落定。        最让考生揪心的事情,就是什么时候可...
  • littletigerat
  • littletigerat
  • 2012-11-12 14:02
  • 6340

2011年计算机考研大纲

<br />2011年计算机考研大纲
  • gengkunpeng
  • gengkunpeng
  • 2011-03-17 14:23
  • 440

读博士的好处

1.使35岁之前成为正教授、博导成为可能 如果你只是一个本科毕业,在科研单位或大学里,工作5年后晋升中级职称,在5年晋升副高级,然后在5年晋升正高级,这其中晋级的酸甜苦辣太多太多,单位按成果排队,其中恼人的人际关系等等,最快到近四十岁才晋升到正高级,硕士毕业也如此。如果你博士毕业,再到先进的国家做...
  • liyanzhong
  • liyanzhong
  • 2014-12-14 12:26
  • 971

求两个升序序列的中位数

这里涉及到数据结构中顺序表的实现、删除、插入、查找等知识,请查看:数据结构 -> 线性表 问题描述: 一个长度为L (L>=1)的升序序列S,处在第[L/2]个位置的数称为S的中位数。例如,若序列S1=(11, 13, 15, 17, 19),则S1的中位数是15,两个序列的中位...
  • u010159842
  • u010159842
  • 2015-07-24 11:16
  • 1668

2010年计算机联考真题——一维数组循环左移

前记从七月份决定开始考研,中间由于听报告,回家复习数学和政治但无论一些时间。自己准备报考山东大学计算机技术的专硕,幸好是数学是考数学二,专业课一直有一门数据结构,这位我的复习节省了很多时间,不想数学一和统考的计算机基础综合的专业复习那么费劲。现在数据结构的复习完全是参照《王道考研系列——2018年数...
  • qq_30091945
  • qq_30091945
  • 2017-08-07 20:17
  • 446

找出序列中的中位数

序列中的中位数
  • cpu_12593
  • cpu_12593
  • 2015-09-05 22:47
  • 2786

2013年计算机联考真题——确定主元

思路: 首先把主元 确定为A[0],并计数cnt=1。之后从下标为1开始遍历数组, 1.如果A[i] == A[0],cnt++ 2.如果不等,则如果cnt>0,cnt–,如果cnt<0,主元设定为A[i],cnt=1。 遍历结束后,再遍历一遍,确定主元的出现的次数,大于n/2,...
  • qq_30091945
  • qq_30091945
  • 2017-08-11 19:33
  • 462

老机房见证90年代以来的计算机发展!

修理网络教室的垃圾电脑,就像参观博物管,整个过程似乎见证了90年代以来的计算机发展。有P3,塞扬, 毒龙,居然还有VIA C3 !昆腾850MB到20G的硬盘,ST,WD……都有。最大,最新的是WD400-LB三星、NCE、创见,HY-PC100 ECC。晕~~~ 服务器内存都来了。真是花...
  • iceashes
  • iceashes
  • 2007-01-23 16:57
  • 323
    个人资料
    • 访问:155560次
    • 积分:4927
    • 等级:
    • 排名:第6843名
    • 原创:329篇
    • 转载:0篇
    • 译文:0篇
    • 评论:80条
    博客专栏
    最新评论