当前位置: 首页 > news >正文

数组间距离计算(包含元素的最大距离)

以下是 Python 代码的 C++ 实现,主要逻辑包括计算数组相对于目标数组的距离,并根据该距离排序:

#include<iostream>#include<vector>#include<set>#include<algorithm>// 计算一个数组 arr 相对于目标数组 obj 的距离intcalculateDistance(conststd::vector<int>&arr,conststd::vector<int>&obj){std::set<int>objSet(obj.begin(),obj.end());// 使用集合进行快速成员检测intmaxGap=0;std::vector<int>indices;for(intnum:objSet){for(size_t i=0;i<arr.size();++i){if(arr[i]==num){indices.push_back(i);}}if(indices.size()>=2){std::sort(indices.begin(),indices.end());intgap=indices.back()-indices.front();// 最后一次出现与第一次出现的索引差if(gap>maxGap){maxGap=gap;}}// 如果数字只出现一次或未出现,gap 为 0,不影响 maxGap}returnmaxGap;}// 将 vector 中的每个元素按照其与 obj 的距离从小到大排序std::vector<std::vector<int>>sortVectorByDistance(conststd::vector<std::vector<int>>&vec,conststd::vector<int>&obj){std::vector<std::vector<int>>sortedVec=vec;std::sort(sortedVec.begin(),sortedVec.end(),[&obj](conststd::vector<int>&a,conststd::vector<int>&b){returncalculateDistance(a,obj)<calculateDistance(b,obj);});returnsortedVec;}intmain(){// 示例数据std::vector<std::vector<int>>myVector={{1,3,5,3,1,2,5},// 数字3的间隔: 索引1到3 -> 2; 数字5的间隔: 索引2到6 -> 4{2,4,6,8},// 没有数字在 obj 中,距离为 0{5,1,5,1,5},// 数字5的间隔: 索引0到4 -> 4{1,1}// 没有数字在 obj 中,距离为 0};std::vector<int>myObj={3,5};// 目标数组,我们关注数字3和5std::cout<<"原始 vector: "<<std::endl;for(size_t i=0;i<myVector.size();++i){intdist=calculateDistance(myVector[i],myObj);std::cout<<" 元素 "<<i<<": ";for(intval:myVector[i]){std::cout<<val<<" ";}std::cout<<", 距离: "<<dist<<std::endl;}std::vector<std::vector<int>>result=sortVectorByDistance(myVector,myObj);std::cout<<"\n排序后的 vector: "<<std::endl;for(size_t i=0;i<result.size();++i){intdist=calculateDistance(result[i],myObj);std::cout<<" 元素 "<<i<<": ";for(intval:result[i]){std::cout<<val<<" ";}std::cout<<", 距离: "<<dist<<std::endl;}return0;}

说明:

  1. calculateDistance 函数:
    · 将目标数组转换为 std::set 以方便查询。
    · 对每个目标数字,在数组中查找所有出现的位置并记录索引。
    · 如果出现次数 ≥ 2,计算最大间隔(最后出现位置 - 第一次出现位置),并更新最大间隔。
  2. sortVectorByDistance 函数:
    · 使用 std::sort 和自定义比较函数(Lambda 表达式),根据每个数组与目标数组的距离进行排序。
  3. 主函数:
    · 定义示例数据 myVector 和 myObj。
    · 输出原始数组及其距离,然后输出排序后的结果。

运行示例输出:

原始 vector: 元素 0: 1 3 5 3 1 2 5 , 距离: 4 元素 1: 2 4 6 8 , 距离: 0 元素 2: 5 1 5 1 5 , 距离: 4 元素 3: 1 1 , 距离: 0 排序后的 vector: 元素 0: 2 4 6 8 , 距离: 0 元素 1: 1 1 , 距离: 0 元素 2: 1 3 5 3 1 2 5 , 距离: 4 元素 3: 5 1 5 1 5 , 距离: 4

这样就用 C++ 完整实现了原 Python 代码的功能。

http://www.cnnetsun.cn/news/5154.html

相关文章:

  • Java智能优化引擎避坑指南:从业务痛点到技术实战心法
  • Vue3 Excel Editor:终极Excel风格数据编辑解决方案
  • 如何快速掌握大麦抢票助手:完整使用指南与实用技巧
  • 基于Spring Boot的智慧校园管理系统设计与实现
  • Chinese-CLIP深度性能评估:三大基准数据集全面解析
  • import_3dm完整教程:轻松实现Rhino到Blender的无缝数据迁移
  • 在家也能和团队调语音?ChatTTS+cpolar,远程协作超方便
  • GSV2702@ACP#2702产品规格详解及产品应用分享
  • 文献综述的 “智能工具矩阵”:八 款工具如何把 “信息堆” 变成 “学术论证链”?——2025 年科研人的认知减负作战手册
  • day121—二分查找—爱吃香蕉的珂珂(LeetCode-875)
  • 如何利用Wan2.2-T2V-A14B提升广告视频产出效率300%
  • Wan2.2-T2V-A14B如何生成带有健康码变色效果的通行管理视频?
  • 24大数据 15-2 线性查找和选择排序
  • 5分钟搞定专业歌词!MusicFreeDesktop新手必学的歌词制作技巧
  • langgraph父子图构建
  • 【毕业设计】SpringBoot+Vue+MySQL 医院病历管理系统平台源码+数据库+论文+部署文档
  • Navicat Premium Mac版无限重置试用期终极指南 [特殊字符]
  • Wan2.2-T2V-A14B在服装走秀视频自动生成中的创意实践
  • 【VTK手册023】深入理解 vtkVertexGlyphFilter:海量点云渲染的高效方案
  • ESP32智能网络收音机:从DIY制作到智能家居音乐系统的完美进化
  • 17、商业与科技:控制的终结与未来走向
  • GC5035 CSP CMOS图像传感器:重新定义移动摄影体验的高性能解决方案
  • 免费学术助手Sci-Hub X Now:零基础安装使用全攻略
  • 微博文本情感分析:大数据分析中的 Python 实践
  • 5分钟打造惊艳代码展示:iCSS CodeBlock终极指南
  • OpenIM Server:构建企业级即时通讯系统的完整解决方案
  • AntdUI终极指南:快速上手现代化WinForm界面开发
  • 告别低质AI视频!Wan2.2-T2V-A14B带来影院级视觉体验
  • 200MB实现千亿级语义理解:Google EmbeddingGemma重塑边缘AI格局
  • 容易出错的电子签证系统预示数字身份证前景