简单算法: 判断两个集合是否有交集

一、引言

在某些场合我们可能需要判断两个集合是否存在交集,譬如笔者再做的项目,在用户设置的寄存器地址列表中,需要判断寄存器地址设置是否有冲突(寄存器的设置往往通过指定开始地址,以及长度来确定),抽象出来其实就是判断集合交集的问题了。

二、思路

要判断两个数据范围是否存在交集,您可以使用简单的数学比较。对于两个区间 [a, b)[c, d),它们存在交集的条件是:
max ⁡ ( a , c ) < m i n ( b , d ) \max(a, c) < min(b, d) max(a,c)<min(b,d)

这个条件确保了两个区间在某个点上重叠。具体来说,这意味着第一个区间的开始点小于第二个区间的结束点,并且第二个区间的开始点小于第一个区间的结束点。

示例解释

譬如对于给出的两个区间 [12, 16)[14, 22) (即我们有一个起始地址12,寄存器长度4;另一个寄存器起始地址14,长度8):

  •   a = 12 , b = 16   \ a = 12, b = 16 \  a=12,b=16 
  •   c = 14 , d = 22   \ c = 14, d = 22 \  c=14,d=22 

我们可以计算:

  •   m a x ( a , c ) = m a x ( 12 , 14 ) = 14   \ max(a, c) = max(12, 14) = 14 \  max(a,c)=max(12,14)=14 
  • min ⁡ ( b , d ) = m i n ( 16 , 22 ) = 16   \min(b, d) = min(16, 22) = 16 \ min(b,d)=min(16,22)=16 

因为 max ⁡ ( a , c ) < min ⁡ ( b , d )   \max(a, c) < \min(b, d) \ max(a,c)<min(b,d) (即 ( 14 < 16 )),所以这两个区间存在交集。

代码实现

编写一个简单的 C++ 函数示例:

#include <iostream>
#include <algorithm> // For std::max and std::min

bool hasIntersection(int a, int b, int c, int d) {
    return std::max(a, c) < std::min(b, d);
}

int main() {
    int a = 12, b = 16;
    int c = 14, d = 22;

    if (hasIntersection(a, b, c, d)) {
        std::cout << "The intervals [" << a << ", " << b << ") and [" << c << ", " << d << ") have an intersection." << std::endl;
    } else {
        std::cout << "The intervals do not intersect." << std::endl;
    }

    return 0;
}

我们定义了一个函数 hasIntersection,它接受四个整数参数,分别代表两个区间的起点和终点,并返回一个布尔值表示这两个区间是否有交集。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

LearnOpenGL(五)之变换

一、缩放&#xff08;Scaling&#xff09; 把缩放变量表示为 (S1,S2,S3)&#xff0c; 将任意向量 (x,y,z) 定义一个缩放矩阵&#xff0c;缩放公式&#xff1a; 二、位移 和缩放矩阵一样&#xff0c;在44矩阵上有几个特别的位置用来执行特定的操作&#xff0c;对于位移来说它们…

通过matlab对比遗传算法优化前后染色体的变化情况

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 通过matlab对比遗传算法优化前后染色体的变化情况. 2.测试软件版本以及运行结果展示 MATLAB2022A版本运行 3.核心程序 ....................................…

JVM(Java虚拟机)练习题目大全

1、什么是Java虚拟机&#xff08;JVM&#xff09;&#xff1f;它的作用是什么&#xff1f; Java虚拟机是Java平台的关键组件之一&#xff0c;它是一个能够执行Java字节码的虚拟计算机。其作用是提供一个跨平台的运行环境&#xff0c;使得Java程序可以在不同的操作系统上运行&a…

javaEE初阶——多线程(九)——JUC常见的类以及线程安全的集合类

T04BF &#x1f44b;专栏: 算法|JAVA|MySQL|C语言 &#x1faf5; 小比特 大梦想 此篇文章与大家分享多线程专题的最后一篇文章:关于JUC常见的类以及线程安全的集合类 如果有不足的或者错误的请您指出! 目录 3.JUC(java.util.concurrent)常见的类3.1Callable接口3.2 RentrantLoc…

5月计算机各省报名时间汇总报名流程

&#x1f4e3;5月有5省可进行计算机报名 天津&#xff1a;5月6日-5月10日 福建&#xff1a;5月6日9:00-5月12日17:00 广西&#xff1a;5月6日9:00-5月12日23:55 重庆&#xff1a;5月6日9:00-5月12日24:00 西藏&#xff1a;预计5月6日-12日 &#x1f50d;计算机等级考试报…

【智能算法应用】灰狼算法(GWO)在低照度图像增强中的应用

目录 1.算法原理2.数学模型3.结果展示4.参考文献 1.算法原理 【智能算法】灰狼算法&#xff08;GWO&#xff09;原理及实现 2.数学模型 对于低照度图像的增强方式可以采用非线性变换函数来对图像的灰度值进行变化&#xff0c;对于不同环境下质量不同的图像&#xff0c;可以将…

Flink 实时数仓(一)【实时数仓离线数仓对比】

前言 昨天技术面的时候&#xff0c;面试官说人家公司现在用的都是最新的技术&#xff0c;比如 Doris 等一些最新的工具&#xff0c;确实这些课是学校永远不会开设的&#xff0c;好在他说去了会带着我做一做。可是 ...... 学院舍不得让走啊 ...... 没办法&#xff0c;情况就是这…

LVGL基础到进阶

GUI 简介 图形用户界面&#xff0c; 是指代采用图形方式现实的计算机操作用户界面 GUI库&#xff1a; 图形用户界面库&#xff0c;只需调用GUI库的函数就看也i快速绘制出所需要的用户界面 优势&#xff1a; 开发难度低可移植性风格统一、协调 常见GUI库 emVinLVGLtouchGF…

传统行业还在使用FTP传输?试试这套FTP替代传输解决方案!

在数字化转型的浪潮中&#xff0c;传统企业对文件传输的需求日益增长。然而&#xff0c;许多企业仍在使用传统的文件传输协议&#xff08;FTP&#xff09;来处理文件传输任务。尽管FTP在早期被广泛采用&#xff0c;但其固有的弊端逐渐成为企业发展的桎梏&#xff0c;所以找一个…

如何从requirements.txt文件中安装pytorch

平时使用requirements.txt文件来安装python的依赖&#xff0c;如下所示&#xff1a; Flask3.0.0 Flask-Cors4.0.0 elastic-transport8.11.0 elasticsearch8.11.1但是如果我们的依赖中包含pytorch依赖&#xff0c;显然是不能简单的通过这个方式来进行的&#xff0c;例如&#x…

VXWorks6.9 + Workbench3.3 Simulation 编译静态库项目搭建和编译

VxWorks系列传送门 一、 创建一个static keneral Library项目 二、添加带编译的文件 浅写两个接口如下: /** testlib.h** Created on: 2024-4-25* Author: Administrator*//** Description:*/

安装 Nginx 的三种方式

通过 Nginx 源码安装需要提前准备的内容&#xff1a; GCC 编译器 Nginx 是使用 C 语言编写的程序&#xff0c;因此想要运行 Nginx 就需要安装一个编译工具 GCC 就是一个开源的编译器集合&#xff0c;用于处理各种各样的语言&#xff0c;其中就包含了 C 语言 使用命令 yum i…

4.8 海思SS928开发 - uboot开发 - 自定义启动以及分区方案验证

4.8 uboot开发 - 自定义启动以及分区方案验证 上文中自定义了分区方案以及启动方案。但还没有验证过能不能用&#xff0c;这里验证一下。 制作镜像 步骤如下&#xff1a; cd ~/hiss928/uboot/ss928_uboot_v2020.1/ source ~/hiss928/sdk/ss928_sdk_g7.3_k4.19/env_setup.sh .…

IntelliJ IDEA - 10 款 IDEA 宝贝插件,YYDS!

好久没发这种实用贴了&#xff0c;最近用到了一些能提升工作效率的IDEA插件&#xff0c;给小伙伴们分享一下。相信我&#xff0c;我分享的这些插件&#xff0c;都是实实在在能解决实际开发场景中痛处的。 1、POJO to JSON 开发工作中&#xff0c;常常在设计完API后&#xff0c…

汽车驾驶3D模拟仿真展示系统更立体直观

随着新能源汽车的普及&#xff0c;它已成为现代生活中不可或缺的交通工具。并且国产车的崛起&#xff0c;其设计与零部件制造水平已能与合资车相媲美&#xff0c;因此汽车维修技能的学习变得尤为重要。汽车维修3D仿真教学软件应运而生&#xff0c;为广大学员提供了一个直观、高…

C语言 | Leetcode C语言题解之第47题全排列II

题目&#xff1a; 题解&#xff1a; int* vis;void backtrack(int* nums, int numSize, int** ans, int* ansSize, int idx, int* perm) {if (idx numSize) {int* tmp malloc(sizeof(int) * numSize);memcpy(tmp, perm, sizeof(int) * numSize);ans[(*ansSize)] tmp;return…

什么是重放攻击(Reply attack)?

什么是重放攻击(Reply attack)? 重放攻击&#xff0c;也称为回放攻击&#xff0c;是一种网络攻击方式。重放攻击是一种中间人攻击&#xff0c;攻击者通过截获合法的数据传输并重新发送它们来欺骗接收方&#xff0c;让接收方误以为是合法的消息。重放攻击是非常常见的&#xf…

ubuntu 复制文件路径

前言 我打算搞一个ubuntu右键复制文件路径的插件&#xff0c;但是找不到&#xff0c;只能平替 这个配置&#xff0c;可以把文件拖拽到cmd窗口&#xff0c;然后就直接cmd输出文件路径 配置 cd ~ vim .bashrc 在文件结尾添加 cdd () { ddirname "$1"; echo …

7-26 约瑟夫问题变形

编号为1…N的N个小朋友玩游戏&#xff0c;他们按编号顺时针围成一圈&#xff0c;按顺时针次序报数&#xff0c;从第1个人报到第M个人出列&#xff1b;然后再从下个人开始报到第M1个人出列&#xff1b;再从下一个人开始报到第M2个人出列……以此类推不断循环&#xff0c;直至最后…

vscode 如何断点调试ros1工程

在vscode中断点调试ros1工程主要分为以下几步&#xff1a; 1. 第一步就是修改cmakelist.txt&#xff0c;到调试模式。 将CMAKE_BUILD_TYPE原来对应的代码注释掉&#xff0c;原来的一般都不是调试模式。加上下面一行代码&#xff0c;意思是设置调试模式。 # 断点调试 SET(CMAK…
最新文章