首页 > 编程语言 >【408DS算法题】进阶011-20年真题_三元组的最小距离

【408DS算法题】进阶011-20年真题_三元组的最小距离

时间:2024-08-11 23:52:07浏览次数:10  
标签:20 进阶 S3 S2 距离 三元组 算法 abs

Index

真题题目

定义三元组(a, b, c)(a, b, c均为正数)的距离D = |a-b| + |b-c| + |c-a| 给定3个非空整数集合S1、S2和S3,按升序分别存储在3个数组中。设计一个尽可能高效的算法,计算并输出所有可能的三元组(a, b, c) ( a ∈ S 1 , b ∈ S 2 , c ∈ S 3 ) (a\in S1, b\in S2, c\in S3) (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)。要求:

  1. 给出算法的基本设计思想。
  2. 根据设计思想,采用C、C++或 Java 语言描述算法,关键之处给出注释。
  3. 说明你所设计算法的时间复杂度和空间复杂度。

(本文重点关注算法实现思路,不含具体答题表述)

分析实现

我们先来分析实现题中出现的小模块——三元组的距离D。

具体实现如下:

#define INT MAXOx7fffffff
int abs(int a){//计算绝对值
	if(a<0) return -a;
	else return a;
}
bool xls_min (int a,int b,int c){//a是否是三个数中的最小值
	if (a<-b&&a<=c)return true;
	return false;
}
int findMinofTrip(int A[],int n,int B[],int m,int c[],int p){
	//D_min用于记录三元组的最小距离,初值赋为INT MAX
	int i=0, j=0, k=0,D_min=INT_MAX,D;
	while(i<n&&j<m&&k<p& &D_min>0){
		D=abs(A[i]-B[j]) +abs(B[j]-c[k])+abs(c[k]-A[i]); //计算Dif(D<D_min) 
		D_min=D;//更新D
		if(xls_min(A[i],B[j],c[k]))
			i++;	//更新a
		else if(xls_min(B[j],c[k],A[i]))
			j++;
		else 
			k++;
	}
	return D_min;
}


总结

以上就是通过定义三个指针,不断调整最小指针逐步进行扫描,以得出三数组构成三元组最小距离的过程。

本题的核心在于分析简化三元组的距离公式,根据简化后的公式可以相对顺利地得出优化后的解题方法。

标签:20,进阶,S3,S2,距离,三元组,算法,abs
From: https://blog.csdn.net/weixin_60702024/article/details/141113200

相关文章

  • Scanner的进阶使用——基础计算
    通过Scanner,可以将我们输入的数字进行计算从而反映出和以及平均数1.定义两个变量,分别是输入的整数以及总数的和2.建立一个扫描器3.使用while关键字进行循环,在符合条件下(输入的是数字)可以一直进行计算过程4.设置电脑接收数据5.设置我们输入的次数以及数字的总和6.输出......
  • Scanner的进阶使用——数字的输入
    1.用Scanner输入数字(整数和小数)1.定义一个整数变量2.建立扫描器3.使用if4.建立电脑接收数据5.设置else(那么)语法6.关闭Scanner......
  • Ideas of Problems in Aug. 2024
    \(\text{LuoguP1552[APIO2012]派遣}\)前置芝士:可并堆(左偏树)或斜堆或启发式合并。本题题意概括为:给定一颗以\(1\)为根的树,每个点有权值\(L_i\),花费\(C_i\),可以选择一个以某个结点为根的子树,并从其中选出一个点集\(T\)满足\(\sum_{i\inT}C_i\leqM\),那么此次的价......
  • 【SPIE出版】第四届计算机视觉、应用与算法国际学术会议(CVAA 2024)
    计算机视觉、应用与算法的领域,一直在飞速发展,第四届计算机视觉、应用与算法国际学术会议(CVAA2024) 将汇聚世界各地的顶尖学者、研究人员和企业代表,共同分享和交流计算机视觉在各个领域的最新研究成果、技术突破和产业应用。我们希望本次会议的成果能对计算机科学领域的知识做......
  • 2024年智能医疗与可穿戴智能设备国际学术会议(SHWID 2024)
    2024年智能医疗与可穿戴智能设备国际学术会议(SHWID2024)将于 2024年10月18-20日在广东广州举行。本次会议主要围绕“智能医疗与可穿戴智能设备”的最新研究展开,旨在荟聚世界各地该领域的专家、学者、研究人员及相关从业人员,分享研究成果,探索热点问题,交流新的经验和技术。202......
  • How to buildORB-SLAM on ubuntu in 2024?
    1removeGTK3sudoaptremovelibgtk3*2installopencvdepenenciessudoaptinstallbuild-essentialcmakegitpkg-configlibgtk-3-dev\libavcodec-devlibavformat-devlibswscale-devlibv4l-dev\libxvidcore-devlibx264-devlibjpeg-devlibpng-devlibt......
  • Linux:@2024-08-11 最新的Openssl-3.3.1 Openssh-9.8p1 Centos7上的编译后二进制 一键
     附件:Portable_Openssl-Openssh9.8p1-bin-el7.v1.4.1.tgz.zip 特点:适用于centos7.x 已经编译为二进制对老版本的关键二进制文件sshd、sftp、scp、openssl进行了备份升级前,自动打开一个端口为2222的老版本的sshd服务,你可以连接那个2222的服务,以防死翘翘。对sshd_confi......
  • 2024.8.11 鲜花
    花の塔君が持ってきた漫画くれた知らない名前のお花今日はまだ来ないかな?初めての感情知ってしまった窓に飾った絵画をなぞってひとりで宇宙を旅してそれだけでいいはずだったのに君の手を握ってしまったら孤独を知らないこの街にはもう二度と帰ってくることはできない......
  • 题解 P6620【[省选联考 2020 A 卷] 组合数问题】
    直接摘抄OI-wiki了。第二类斯特林数第二类斯特林数(斯特林子集数)\(\begin{Bmatrix}n\\k\end{Bmatrix}\),也可记做\(S(n,k)\),表示将\(n\)个两两不同的元素,划分为\(k\)个互不区分的非空子集的方案数。递推式\[\begin{Bmatrix}n\\k\end{Bmatrix}=\begin{Bmatrix}n-1\\k-1......
  • 【数据分析---- Pandas进阶指南:核心计算方法、缺失值处理及数据类型管理】
    前言:......