【王道数据结构编程题】- 找出未出现的最小正整数 + 计算并输出所有可能的三元组中的最小距离

目录

1.王道代码题:【2018统考真题】给定一个含n(n>=1)个整数的数值,请设计一个在时间上尽可能高效的算法,找出数值中未出现的最小正整数,例如,数值{-5,3,2,3}中未出现的最小正整数是1,数组{1,2,3}中未出现的最小正整数是4。

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)。


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

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

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

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

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

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

顺序表-找出两个序列A和B的中位数+找出序列A的主元素 

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;
}

猜你喜欢

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