为了屏幕前的你着想,那就给你把题抄上,就为了能得到您的一个赞,呜呜呜。。孩子太可怜了
来个简单的试试吧!
01 将最小值元素在顺序表中删除并且返回被删除元素的值,并将最后的元素填补进去,若顺序表为空的话,就要显示Result Error,并退出运行。
解答思想:
首先我们要先找到最小值然后再进行删除,这个题目没有时间复杂度要求,对于非大佬神仙类学生,时间有限,暴力出奇迹吧!
找到它并且删除它。
bool deleteElemet(SqList &L, ElemType &e)
{
//删除L中最小值元素的节点,用e返回
if(L.length==0)
{
printf("Result Error! ");
return false; //顺序表为空,中止返回
}
e=L.data[0]; //初始化赋值min
int flag=0;
for(int i=0;i
2020真题
定义三元组(a, b, c)(其中a, b, c均为正数)的距离D=|a-b| + |b-c| + |c-a|。给定三个非空整数集合S1、S2和S3,按升序分别存储在3个数组中。设计一个尽可能高效的算法,计算并输出所有可能的三元组(a, b, c)(a∈S1, b∈S2, c∈S3)中的最小距离。要求:
(1)给出算法的基本设计思想。
(2)根据设计思想,采用 C 或 C++语言描述算法,关键之处给出注释。
(3)说明你所设计算法的时间复杂度和空间复杂度。
解答思想:
(1)
注:问设计思想,分步写答案,抓关键字→(集合,数组)==>顺序表/队列,注意出题人给你的线索(正数,距离)
①扫描三个顺序表S1,S2,S3,将三个顺序表中的非正数删除。
②初始化D_min(a=S1[0],b=S2[0],c=S3[0],i,j,k为S1,S2,S3的序数)代入距离D最短距离然后计算S1[i]、S2[j]、S3[k]之间的D。
③若D
⑤输出结果D_min。
(2)算法实现
int abs(int a,int b)
{//计算绝对值。
int sum=0;
if(a-b<0)
{m_
sum=b-a;
}
else
{
sum =a-b;
}
return sum;
}
//王道书里明确要求是a,b,c是正数,所以我们要改一下表
int* S_tripper(int S[],l)
{
for(int i=0;i0)
{
D=abs(S1[i],S2[j])+abs(S2[j],S3[k])+abs(S1[i],S3[k]);//计算D
if(D
(3)
计算时间复杂度 n=(|S1|+|S2|+|S3|),为O(n),空间复杂度为O(1)。