【王道数据结构编程题】- 找出两个序列A和B的中位数 + 找出序列A的主元素

目录

1.王道代码题:【2011统考真题】一个长度为L(L>=1)的升序序列S,处在第[L/2]个位置的数称为S的中位数,例如,若序列S1 = (11,13,15,17,19),则S1的中位数是15,两个序列的中位数是含它们所有元素的升序序列的中位数。例如,若S2=(2,4,6,8,20),则S1和S2的中位数是11。现在有两个等长升序序列A和B,试设计一个在时间和空间两方面都尽可能高效的算法,找出两个序列A和B的中位数。

2.王道代码题:【2013统考真题】已知一个整数序列A=(a0,a1,...an-1),其中0<=ain/2。则称x为A的主元素。例如:A=(0,5,5,3,5,7,5,5),则5就是一个主元素。又如A=(0,5,5,3,5,1,5,7),则A中没有主元素。假设A中的n个元素保存在一个一维数组中,设计一个算法,找出A的主元素。若存在主元素,则输出该元素。否则,输出-1。(0<=i


其他-王道数据结构算法题-顺序表题,如下

顺序表-删除最小值元素+元素逆置

删除所有值为x的数据元素+删除值在给定值s与t之间所有元素

顺序表-删除值在给定值之间元素+删除值重复元素

顺序表-两个有序顺序表合并+两个顺序表位置互换

顺序表-查找数值为x的元素+循环左移p个位置

顺序表-找出未出现的最小正整数+三元组最小距离 

1.王道代码题:【2011统考真题】一个长度为L(L>=1)的升序序列S,处在第[L/2]个位置的数称为S的中位数,例如,若序列S1 = (11,13,15,17,19),则S1的中位数是15,两个序列的中位数是含它们所有元素的升序序列的中位数。例如,若S2=(2,4,6,8,20),则S1和S2的中位数是11。现在有两个等长升序序列A和B,试设计一个在时间和空间两方面都尽可能高效的算法,找出两个序列A和B的中位数。

代码实现:

//中位数
#include<iostream>
using namespace std;
int a[5]={11,13,15,17,19};
int b[5]={2,4,6,8,20};
int c[10];
int verge(int a[],int b[],int c[])
{
    int i=0,j=0,k=0;
    while(i<5&&j<5)
    {
        if(a[i]<=b[j])    c[k++]=a[i++];
        else  c[k++]=b[j++];
    }
    while(i<5) c[k++]=a[i++];
    while(j<5) c[k++]=b[j++];
    return c[(k-1)/2];
}
int main()
{
    int t=verge(a,b,c);
    for(int i=0;i<10;i++) cout<<c[i]<<" ";
    cout<<"中位数:"<<t<<endl;
    cout<<endl;

    return 0;
}

2.王道代码题:【2013统考真题】已知一个整数序列A=(a0,a1,...an-1),其中0<=ai<n(0<=i<n)。若是存在ap1=ap2=...=apm=x且m>n/2。则称x为A的主元素。例如:A=(0,5,5,3,5,7,5,5),则5就是一个主元素。又如A=(0,5,5,3,5,1,5,7),则A中没有主元素。假设A中的n个元素保存在一个一维数组中,设计一个算法,找出A的主元素。若存在主元素,则输出该元素。否则,输出-1。

代码实现:

//主元素 
#include<iostream>
using namespace std;
int a[8]={0,5,5,3,5,7,5,5};
int a1[8]={0,5,5,3,5,1,5,7};
int n=8;

bool half(int a[],int &cc)
{
    int c=a[0],count=1;
	int i;
    for(i=1;i<n;i++)
    {
        if(a[i]==c) count++;
        else{
            if(count>0) count--;
            else {
                c=a[i];
                count=1;
            }
        }
    }
    int k=0;
    for(i=0;i<n;i++) if(a[i]==c) k++;
    if(k>n/2) { cc=c;return true;}
    else return false;
}

int main()
{
    int cc;
    if(half(a,cc)) cout<<"主元素为 "<<cc<<endl;
    else cout<<"-1"<<endl;
    return 0;
}

找到主元素,则将主元素输出。 

没找到主元素 

int main()
{
    int cc;
    if(half(a1,cc)) cout<<"主元素为 "<<cc<<endl;
    else cout<<"-1"<<endl;
    return 0;
}

没有找到主元素,则输出-1。

猜你喜欢

转载自blog.csdn.net/m0_56051805/article/details/125364554