目录
其他-王道数据结构算法题-顺序表题,如下
顺序表-删除所有值为x的数据元素+删除值在给定值s与t之间的所有元素
1.王道代码题:【2018统考真题】给定一个含n(n>=1)个整数的数值,请设计一个在时间上尽可能高效的算法,找出数值中未出现的最小正整数,例如,数值{-5,3,2,3}中未出现的最小正整数是1,数组{1,2,3}中未出现的最小正整数是4。
代码实现:
//找出最小的未出现的正整数
#include<iostream>
using namespace std;
int a[4]={-5,3,2,3};
//int n=4;
int i;
int findmin(int a[])
{
int b[4+2]={'\0'};
for(i=0;i<4;i++)
{
if(a[i]>0&&a[i]<=4+1) b[a[i]]=1;
}
int ans=0;
for(i=1;i<4+2;i++)
{
if(b[i]==0)
{
ans=i;
break;
}
}
return ans;
}
int main()
{
for(i=0;i<4;i++) cout<<a[i]<<" ";
cout<<endl;
cout<<findmin(a)<<endl;
return 0;
}
int a[4]={1,2,3};
2.王道代码题:【2020统考真题】定义三元组(a,b,c)(a,b,c均为正整数)的距离D=|a-b|+|b-c|+|c-a|。给定3个非空整数集合S1,S2和S3,按升序分别存储在3个数组中。请设计一个尽可能高效算法,计算并且输出所有可能的三元组(a,b,c)(a属于S1,b属于S2,c属于S3)中的最小距离。例如S1={-1,0,9},S2={-25,-10,10,11},S3={2,9,17,30,41},则最小距离为2,相应的三元组为(9,10,9)。
代码实现:
//三元组最短距离
#include<iostream>
using namespace std;
#define Max 0x7fffffff
int abss(int a)
{
if(a<0) return -a;
else return a;
}
int min(int a,int b){//求最小值函数
int minvalue;
minvalue = a < b ? a : b;
return minvalue;
}
bool minn(int a,int b,int c)
{
if(min(a,min(b,c))==a) return true;
return false;
}
int findd(int a[],int b[],int c[],int na,int nb,int nc)
{
int i=0,j=0,k=0,ans=Max;
while(i<na&&j<nb&&k<nc&&ans>=0)
{
int v=abs(a[i]-b[j])+abs(b[j]-c[k])+abs(c[k]-a[i]);
if(v<ans) ans=v;
if(minn(a[i],b[j],c[k])) i++;
else if(minn(b[j],a[i],c[k])) j++;
else k++;
}
return ans;
}
int main()
{
int a[3]={-1,0,9},b[4]={-25,-10,10,11},c[5]={2,9,17,30,41};
int na=3,nb=4,nc=5;
cout<<findd(a,b,c,3,4,5)<<endl;
return 0;
}