目录
其他-王道数据结构算法题-顺序表题,如下
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。