考研算法35天:三元组的最小距离 【双指针,滑动窗口,多路归并】

news2024/11/16 15:47:38

算法详解

多路归并;多路归并算法从理论到应用(易懂)_留恋单行路的博客-CSDN博客

多路归并就是将多个已经归并排序排好序的数组再进行排序(不一定是通过归并排序)。

算法题目

这道题就是一般做法是先通过排序将三个数组排好然后再进行三指针求最小。但是我们仔细考虑一下,如果我们先将这三个数组排好序那么势必需要额外开一个数组,那么空间复杂度就变成了O(N)。如果我们在排序的同时去取最小距离呢?我们就不需要开一个额外的数组了。 但是那样咋做呢?我们来模拟一下吧。

假如现在我们已经找到三个点了,分别是a,b,c;那么我们如何求例题中那个式子的最小值呢?其实我们可以将例题中的式子换一下。就变成了len = 2 * (max(a,b,c) - min(a,b,c)).如下图

 

然后,继续:那么我们如何才能找到那三个指针呢?我认为只需要三个指针每次如果谁小于等于其他两个指针就算一次res(式子的值)=(max - min)*2。然后将最小的那个指针向后移动(目的:减小三个指针之间的值)。

#include <iostream>
using namespace std;

const int N = 100010; 
long long int a[N];
long long int b[N];
long long int c[N];

int main(){
    long long int  l,n,m;
    cin>>l>>n>>m;
    for(int i=0;i<l;i++)cin>>a[i];
    for(int i=0;i<n;i++)cin>>b[i];
    for(int i=0;i<m;i++)cin>>c[i];
    
    long long int res = 1e18;
    int i,j,k;
    long long int x,y,z;
    for( i=0,j=0,k=0;i<l&&j<n&&k<m;){
        x=a[i], y=b[j], z=c[k];
        res = min(res,max(x,max(y,z)) - min(x,min(y,z)));
        if(x<=y&&x<=z) i++;
        else if(y<=x&&y<=z) j++;
        else k++;
    }
    cout<<res*2;
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/707714.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

4.23 时域微积分特性

时域微分还有个证明方式 2式两边求导即可推出时域微分特性

ElasticSearch学习01——Windows10环境下ES安装经验与踩到的坑

由于对ES基本概念和历史演进在网上随处可查,所以本文在此不做赘述.随意本文直接讲述如何安装使用ES 1.安装JDK ​ ElasticSearch是基于lucence开发的&#xff0c;也就是运行需要java jdk支持。所以要先安装JAVA环境。由于ElasticSearch 5.x 往后依赖于JDK 1.8的&#xff0c;所…

配置Jenkins的slave agent并使用它完成构建任务

上一章&#xff0c;使用单机配置并运行了一个简单的maven项目&#xff0c;并发布到了一个服务器上启动。这一章将要配置一个slave agent&#xff0c;并将上一章的job放到agent上执行。我们agent使用的是ssh的方式 前置步骤 准备两台虚拟机&#xff1a; 192.168.233.32&#…

4.27 功率谱

功率信号能量一定是无穷大的 1处解释&#xff0c;由于上述信号是截断信号&#xff0c;只有-T/2 ~ T/2有有效信号&#xff0c;因此有了1式 能量信号和能量密度构成傅里叶变换对 功率信号和功率密度构成傅里叶变换对 自相关函数和他的能量谱或者功率谱构成傅里叶变换对

Quiz 12: Regular Expressions | Python for Everybody 配套练习_解题记录

文章目录 Python for Everybody课程简介Regular Expressions单选题&#xff08;1-8&#xff09;操作题Regular Expressions Python for Everybody 课程简介 Python for Everybody 零基础程序设计&#xff08;Python 入门&#xff09; This course aims to teach everyone the …

CPU acceleration status: KVM requires a CPU that supports vmx or svm

关闭虚拟机&#xff0c;选择处理器将虚拟化引擎第一个选项选上&#xff0c;重新打开虚拟机&#xff0c;进行编译打开模拟器。 source build/envsetup.shlunch aosp_x86_64-engemulator

mesh网格数据解析及cesium绘制格网三角网可视化实现

代码实现运行效果 技术术语 Mesh通常指网络拓扑中的网状结构。在计算机网络中&#xff0c;Mesh是指每个节点都与其他节点相连&#xff0c;形成一个无中心的网状结构。Mesh网络常见于分布式计算、传感器网络、互联网等场景中。另外&#xff0c;在3D计算机图形学中&#xff0c;M…

前端web入门-移动web-day08

(创作不易&#xff0c;感谢有你&#xff0c;你的支持&#xff0c;就是我前行的最大动力&#xff0c;如果看完对你有帮助&#xff0c;请留下您的足迹&#xff09; 目录 平面转换 平面转换 transform 平面转换 – 平移 平移实现居中效果 平面转换 – 旋转 平面转换 – 改…

最新特斯拉电机控制器4D1实拍

特斯拉发布过自己的扁线电机&#xff0c;最近Ingineerix大神发布了特斯拉最新动力系统的拆机视频&#xff0c;本篇结合之前的Tesla Model 3 SIC 控制器&#xff08;控制器具体命名不清楚&#xff0c;以最熟悉的一款车型进行描述我们不妨称之为第二代&#xff0c;第一代为单管IG…

Web安全——JavaScript基础(加入案例)

JavaScript基础 一、概述二、嵌入方法1、内嵌式2、外链式3、行内式 三、语句四、注释五、变量六、JavaScript 保留关键字七、JavaScript 作用域1、JavaScript 局部变量2、JavaScript 全局变量 八、数据类型1、判断类型2、数字类型&#xff08;Number&#xff09;3、字符串型&am…

满汉楼项目

满汉楼项目 1. 满汉楼介绍 满汉楼是一个综合餐饮管理系统&#xff0c;其主要分为&#xff1a; 人事登记&#xff1a;各部门人员信息登录管理&#xff1a;员工号、姓名、职位、密码菜谱价格&#xff1a;菜谱及价格报表统计&#xff1a;统计销售额成本及库房&#xff1a;名称注…

深度学习优化算法

梯度下降算法 随机梯度下降。随机梯度下降是指每次迭代在训练数据中随机抽取一个数据计算梯度来更新模型得参数。随机梯度下降容易受到噪声干扰,训练时间长,代价函数最终会围绕全局最小值或者局部极小值震荡。批量梯度下降。每次迭代时使用所有的训练数据来计算梯度更新模型的…

vue使用emit控制改变父组件的值,实现子组件的显示与隐藏

vue使用emit控制改变父组件的值&#xff0c;实现子组件的显示与隐藏 需求概述 父组件在提交表单后&#xff0c;弹框进行提示&#xff0c;子组件是一个弹框。 vue版本 v2.x 实现原理 在父组件内建立控制器isShowModal&#xff0c;使用v-if来控制子组件的显示与隐藏。在子组…

Node.js中的process.nextTick与浏览器环境中的nextTick有何不同?

文章目录 nextTick 是一个用于异步操作的函数Node.js中的process.nextTick vs 浏览器环境中的nextTick1. 执行时机2. 微任务队列3. 堆栈溢出风险4. 兼容性 nextTick 是一个用于异步操作的函数 nextTick 是一个用于异步操作的函数&#xff0c;用来在当前执行栈执行完毕后&#…

第2章 k-近邻算法

文章目录 第2章 k-近邻算法2.1k-近邻算法概述2.1.1准备&#xff1a;使用Python导入数据2.1.2实施kNN分类算法 2.2示例&#xff1a;使用k近邻算法改进约会网站的2.2.2分析数据&#xff1a;使用Matplotlib创建散点图2.2.3准备数据&#xff1a;归一化数值2.2.4测试算法 第2章 k-近…

C++中的继承(超详细)

文章目录 &#x1f4cd;前言C中的继承1.继承的概念及定义1.1 继承的概念1.2 继承的定义1.2.1 定义格式1.2.2 继承关系和访问限定符1.2.3 继承基类成员访问方式的变化 2. 基类和派生类对象赋值转换3.继承中的作用域4.派生类的默认成员函数5.继承与友元6.继承与静态成员7.复杂的菱…

Anaconda详细安装及配置教程(Windows)

Anaconda详细安装及配置教程&#xff08;Windows&#xff09; 一、下载方式1、官网下载2、网盘下载 二、安装三、配置四、创建虚拟环境 一、下载方式 1、官网下载 点击下载 点击window下载即可。 2、网盘下载 点击下载 二、安装 双击运行 点next 点I agree next 如…

4.26 能量谱

上述函数使用时域计算就很复杂&#xff0c;但是使用帕斯瓦尔就比较简单

git 获取两个版本间的变更文件,生成增量包

可用于代码在无git环境情况下的做增量包 #下面命令可以获取两个版本直接的变更文件 git diff 开始版本号 截止版本号 --name-only 使用管道命令生成压缩包 git diff 开始版本号 截止版本号 --name-only | xargs zip update.zip 牛逼之处就是打出来的压缩包是带有目录层级关系的…

ubuntu20 准备阶段

1. 换源 换成中国的源&#xff0c;图中为腾讯源 2. 系统自带中文输入法 中文输入法 3. 终端Terminator的安装 终端Terminator的安装 4. 截图shtter shutter 5. ros安装 ros安装 6. gazebo11 安装ros自带版本11&#xff0c;可以使用