< 每日算法 - Javascript解析: 交通枢纽 >

news2024/10/9 10:30:07

在这里插入图片描述

每日算法 - JavaScript解析:交通枢纽

  • 一、任务描述:
    • 》 示例一:
    • 》示例二
  • 二、题意解析
    • 拓展知识
  • 三、解决方案:
  • 往期内容 💨

一、任务描述:

为了缓解「力扣嘉年华」期间的人流压力,组委会在活动期间开设了一些交通专线。path[i] = [a, b] 表示有一条从地点 a通往地点 b 的 单向 交通专线。 若存在一个地点,满足以下要求,我们则称之为 交通枢纽

  • 所有地点(除自身外)均有一条 单向 专线 直接 通往该地点;
  • 该地点不存在任何 通往其他地点 的单向专线。
  • 请返回交通专线的 交通枢纽。若不存在,则返回 -1。

注意对于任意一个地点,至少被一条专线连通

本题取自 leetcode 秋赛题集

》 示例一:

输入:path = [[0,1],[0,3],[1,3],[2,0],[2,3]]

输出:3

解释:如下图所示: 地点 0,1,2 各有一条通往地点 3 的交通专线, 且地点 3 不存在任何通往其他地点的交通专线。
在这里插入图片描述

》示例二

输入:path = [[0,3],[1,0],[1,3],[2,0],[3,0],[3,2]]

输出:-1

解释:如下图所示:不存在满足 交通枢纽 的地点。
在这里插入图片描述

二、题意解析

根据题目,可以思考得出,如需成为交通枢纽有以下判定条件:

  1. 该地点要有 path.length - 1 条进入该地点的单向线路, 接就是说,二维数组path中,path[i] = [a, b] 的 b,必须出现path.length - 1次;
  2. 该地点不允许有通往其他地点的线路,指的是,path[i] = [a, b] 的 a,必须不能是该交通枢纽;

解题思路①
通过 new Set()去重传入的path数组,获取所有地点。循环path,借助数组filtersome方法判断地点是否符合上述条件。

解题思路②
通过对象类型的特性,循环记录每个点的进出线路。循环用于存储地点进出线路信息的对象,判断地点是否符合上述条件。


拓展知识

  • every() 是对数组中每一项运行给定函数,函数中返回布尔值,一般用作数组中,对数组每一项进行规则校验,判断是否符合自定义规则。every()返回的是一个布尔值,即 true / false, 返回 true则继续执行循环,返回false则跳出循环。

  • some() 是对数组中每一项运行给定函数,也是返回布尔值,但是与every() 不同的是,some()中的函数返回true,则跳出循环,false则继续执行循环,常用于判断数组中是否存在某个值。

  • filter():返回一个创建的一个新数组,新数组中的元素是通过检查指定数组中符合条件的所有元素

详细点击跳转 👉 < Javascript中数据处理小技巧 — 数组篇 >👈


三、解决方案:

/**
 * @param {number[][]} path
 * @return {number}
 */
var transportationHub = function(path) {
	// 思路一
    let points = []
    // 获取地点
    path.forEach(item => {
        points.push(...item)
    })
    points = [...new Set(points)]
	// 循环地点
    for(let point in points) {
        if(path.filter(item => item[1] == point).length === (points.length -1) && !path.some(item => item[0] == point)) {
            return point
        }
    }
    return -1


	// 思路二
    let pointInfo = {}
    path.forEach(item => {
        pointInfo[item[0]] = pointInfo[item[0]] || {
            out: 0,
            in: 0
        }
        pointInfo[item[1]] = pointInfo[item[1]] || {
            out: 0,
            in: 0
        }
        pointInfo[item[0]].out++
        pointInfo[item[1]].in++
    })
    for(let key in pointInfo) {
        if(!pointInfo[key].out && pointInfo[key].in === (Object.keys(pointInfo).length - 1)) {
            return key
        }
    }
    return -1
};

往期内容 💨

🔥 < CSS小技巧:filter滤镜妙用>

🔥 < JavaScript技术分享: 大文件切片上传 及 断点续传思路 >

🔥 < 每日技巧: JavaScript代码优化 >

🔥 < 每日知识点:关于Javascript 精进小妙招 ( Js技巧 ) >

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

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

相关文章

谷歌优化排名怎么做?Google SEO怎么优化?

本文主要分享关于Google自然排名优化中的一些方法和技巧,让你更快的做好谷歌排名。 本文由光算创作,有可能会被修改和剽窃,我们佛系对待这种行为吧。 谷歌优化排名怎么做?Google SEO怎么优化? 答案是:创…

CMOS器件与TTL器件CMOS电平与TTL电平

常用的数字芯片,按制造工艺主要分为TTL器件和CMOS器件。TTL器件是指其内部主要逻辑单元为双极性晶体管,CMOS器件是指其内部的主要逻辑单元为MOS管。现在绝大部分数字芯片使用的工艺都是CMOS工艺,在一些比较老的74系列芯片中还使用的是TTL工艺…

51单片机最强模块化封装(1)

文章目录前言一、sys文件创建和路径添加1.创建文件夹添加文件夹路径二、sys文件编写1.sys.h2.sys.c三、模块化的测试总结前言 今天将为大家讲解51单片机的模块化封装,为什么要讲这个模块化封装呢?模块化封装将提高我们代码的可移植性和可复用性&#xf…

力扣刷题记录——1002. 查找共用字符、905. 按奇偶排序数组、 977. 有序数组的平方

本专栏主要记录力扣的刷题记录,备战蓝桥杯,供复盘和优化算法使用,也希望给大家带来帮助,博主是算法小白,希望各位大佬不要见笑,今天要分享的是——《力扣刷题记录——1002. 查找共用字符、905. 按奇偶排序数…

服务器被ddos攻击的处置策略

如果您的服务器遭到了DDoS攻击,以下是一些可以采取的措施:使用防火墙和安全组进行限制:限制服务器的流量以防止进一步的攻击。升级服务器资源:为了应对更高的流量,可以升级服务器的内存,处理器等资源。安装…

GraspNet-1Billion

目录 .1 intro .2 Dataset 2.1 data collection: 2.2 data annotation 2.3 evaluation .3 backbone 3.1 Training and Inference 3.2 Experiment References .1 intro contribution: 一个具有统一评价体系的大规模抓取姿态检测数据集 评估系统通过解析计…

顶会论文 | 虚拟网络探测技术的探索与实践

作者:吕彪 阿里云网络齐天负责人 云网络由物理网络和虚拟网络共同组成,两者都会影响网络性能。过去的研究主要集中于解决物理网络探测,而在虚拟网络探测领域的相应研究则较少。本文将为大家分享一种专为大规模多租户虚拟网络设计的主动探测系…

SAP进阶技术分享一:ABAP增强(1)

一:基于源代码的增强 1.定义 源代码增强以子程序形式发布,可以用PERFORM调用这些子程序,发布的时候是空的,提供一个空代码的子过程,用户可以添加自己的代码。 2.特点 需要修改sap的标准代码。   屏幕增强以客户屏幕…

opencv轮廓相关函数

查找轮廓contours, hierarchy cv2.findContours(image,mode,method)参数:image:寻找轮廓所使用的图像。(寻找过程不修改此图像)mode:模式。cv2.RETR_EXTERNAL只检测外轮廓;cv2.RETR_LIST检测的轮廓不建立等…

【Qt】10.Linux下,Qt连接云MySQL数据库

目录 下载MySQL压缩包 配置MySQL Qt下编译MySQL 测试 下载MySQL压缩包 网址: MySQL :: Download MySQL Community Server (Archived Versions)https://downloads.mysql.com/archives/community/ 我为了跟云服务器上的MySQL版本一致,减少不必要的麻…

带你手撕排序算法

文章目录前言一、排序的相关概念二、插入排序1.直接插入(1)算法思想(2)算法讲解(3)代码及解析(4)代码总结2.希尔排序( 缩小增量排序 )(1)算法思想&#xff08…

maxcomputer的分区表相关操作

– 查看xsxw(学生行为表定义) desc xsxw; – 查看xsxw1(学生行为表定义) desc xsxw1; – 上面的两张表是通过ddl语句创建的分区表 – 创建ddl语句如下 – CREATE TABLE IF NOT EXISTS xsxw1( – xwsj STRING COMMENT ‘行为时间’, – xh STRING COMMENT ‘学号’, – xwdd ST…

基于OptiSystem的LD\LED\EDFA仿真分析

1、客户需求: (1) 仿真LD、LED直接调制系统的输出光谱,观察系统输出性能。 (2) 采用EDFA的光纤通信系统,实现对多路光波信号的放大,实现200km、40Gbit/s的传输。用仿真软件搭建一个…

关系数据库——关系代数

文章目录一、传统的集合运算二、专门的关系运算1.选择(restriction)2.投影(Projection)3.连接(join)1)等值连接2)自然连接4.除(Division)一、传统的集合运算 …

《深入浅出计算机组成原理》学习笔记 Day17

冒险和预测(一)1. 结构冒险2. 数据冒险参考1. 结构冒险 结构冒险本质上是一个硬件层面的资源竞争问题,也就是一个硬件电路层面的问题。 CPU 在同一个时钟周期内,同时在运行两条计算机指令的不同阶段,但这两个不同阶段…

Github消息推送到Telegram,并使用Vercel部署

Github buibuibui Telegram 仓库地址:https://github.com/yesmore/gh-buibuibui-tg 借助 Github 的 Webhooks、Vercel’s Serverless API 和 Telegram Bot,连接 Github 和 Telegram,在 Telegram chat 中接收仓库的消息。 效果:你…

深入分析ConcurrentHashMap1.8的扩容实现

什么情况会触发扩容 当往hashMap中成功插入一个key/value节点时,有可能触发扩容动作: 1、如果新增节点之后,所在链表的元素个数达到了阈值 8,则会调用treeifyBin方法把链表转换成红黑树,不过在结构转换之前&#xff0…

做跨境电商日本市场,如何才能让客户满意?

跨境电商作为互联网技术的产物,现如今早就风靡全世界。我国跨境电商行业的发展起步时间比较晚,但在各方力量的加持下,行业的发展日趋完善,行业对国内经济的带动作用也更加明显。当下许多国潮品牌在Starday等跨境电商服务平台的支持…

如何选择研发效能管理平台?好用的研发效能管理平台有哪些

本文将对比介绍8款比较知名的效能度量管理平台:1.PingCode;2.思码逸;3.云效;4.金山云;5.Git;6.Jenkins;7.Bamboo;8.Docker。但在对比研发效能平台之前,我们先来聊一些研发…

Linux驱动开发基础__POLL机制

目录 1 适用场景 2 POLL机制的内核代码详解 2.1 sys_poll 函数 2.2 do_sys_poll 函数 2.3 do_poll函数 3 poll机制使用流程 4 驱动编程 5 应用编程 6 代码 6.1 gpio_key_drv.c 6.2 button_test.c 6.3 Makefile 可以看 字符设备驱动程序之poll机制 那篇文章中的机…