​力扣解法汇总1129. 颜色交替的最短路径

news/2023/11/28 23:05:52

目录链接:

力扣编程题-解法汇总_分享+记录-CSDN博客

GitHub同步刷题项目:

https://github.com/September26/java-algorithms

原题链接:力扣


描述:

在一个有向图中,节点分别标记为 0, 1, ..., n-1。图中每条边为红色或者蓝色,且存在自环或平行边。

red_edges 中的每一个 [i, j] 对表示从节点 i 到节点 j 的红色有向边。类似地,blue_edges 中的每一个 [i, j] 对表示从节点 i 到节点 j 的蓝色有向边。

返回长度为 n 的数组 answer,其中 answer[X] 是从节点 0 到节点 X 的红色边和蓝色边交替出现的最短路径的长度。如果不存在这样的路径,那么 answer[x] = -1

示例 1:

输入:n = 3, red_edges = [[0,1],[1,2]], blue_edges = []
输出:[0,1,-1]

示例 2:

输入:n = 3, red_edges = [[0,1]], blue_edges = [[2,1]]
输出:[0,1,-1]

示例 3:

输入:n = 3, red_edges = [[1,0]], blue_edges = [[2,1]]
输出:[0,-1,-1]

示例 4:

输入:n = 3, red_edges = [[0,1]], blue_edges = [[1,2]]
输出:[0,1,2]

示例 5:

输入:n = 3, red_edges = [[0,1],[0,2]], blue_edges = [[1,0]]
输出:[0,1,1]

提示:

  • 1 <= n <= 100
  • red_edges.length <= 400
  • blue_edges.length <= 400
  • red_edges[i].length == blue_edges[i].length == 2
  • 0 <= red_edges[i][j], blue_edges[i][j] < n

解题思路:

* 解题思路:
* 从0点开始,一层一层的往上找。每层区分是从红边开始还是从蓝边开始,
* 如果是红边开始则寻找蓝边可到达的边,如果存在则加入Set,继续进行下一轮。反之蓝边开始也是一样的
* 最后得到两个数组,分别记录的是从蓝边和红边出发最短的路径,求两者更低的即可。

代码:

public class Solution1129 {Map<Integer, HashSet<Integer>> redMap = new HashMap<>();Map<Integer, HashSet<Integer>> blueMap = new HashMap<>();public int[] shortestAlternatingPaths(int n, int[][] redEdges, int[][] blueEdges) {for (int[] ints : redEdges) {HashSet<Integer> set = redMap.get(ints[0]);if (set == null) {set = new HashSet<Integer>();redMap.put(ints[0], set);}set.add(ints[1]);}for (int[] ints : blueEdges) {HashSet<Integer> set = blueMap.get(ints[0]);if (set == null) {set = new HashSet<Integer>();blueMap.put(ints[0], set);}set.add(ints[1]);}int[] redLength = new int[n];int[] blueLength = new int[n];Arrays.fill(redLength, Integer.MAX_VALUE);Arrays.fill(blueLength, Integer.MAX_VALUE);HashSet<Integer> set = new HashSet<>();set.add(0);search(0, redLength, blueLength, set, set);for (int i = 0; i < redLength.length; i++) {redLength[i] = Math.min(redLength[i], blueLength[i]);redLength[i] = redLength[i] == Integer.MAX_VALUE ? -1 : redLength[i];}redLength[0] = 0;return redLength;}private void search(int length, int[] redLength, int[] blueLength, Set<Integer> redSet, Set<Integer> blueSet) {length++;Set<Integer> nextRedSet = new HashSet<>();Set<Integer> nextBlueSet = new HashSet<>();for (Integer current : redSet) {HashSet<Integer> integers = redMap.getOrDefault(current, new HashSet<>());for (int index : integers) {if (redLength[index] == Integer.MAX_VALUE) {redLength[index] = length;nextBlueSet.add(index);}}}for (Integer current : blueSet) {HashSet<Integer> integers = blueMap.getOrDefault(current, new HashSet<>());for (int index : integers) {if (blueLength[index] == Integer.MAX_VALUE) {blueLength[index] = length;nextRedSet.add(index);}}}if (nextRedSet.size() == 0 && nextBlueSet.size() == 0) {return;}search(length, redLength, blueLength, nextRedSet, nextBlueSet);}
}


http://www.ppmy.cn/news/21467.html

相关文章

stm32学习笔记-2 软件安装及创建工程

2 软件安装及创建工程 [toc] 注&#xff1a;笔记主要参考B站 江科大自化协 教学视频“STM32入门教程-2023持续更新中”。 注&#xff1a;工程及代码文件放在了本人的Github仓库。 2.1 软件安装 软件安装的步骤有&#xff1a; 安装Keil5 MDK。Keil5 MDK专门用于给ARM系列单片…

C++初阶--map和set

目录 关联式容器 set set的模板参数列表 set的构造 set的使用 multiset map map的模板参数 map的构造 map的容量与元素访问 map的使用 multimap 底层结构 AVL树 节点的定义 实现 图解 红黑树 性质 节点的定义 实现 图解​ 红黑树模拟实现STL中的map和set MyMap.h MySet.…

【八大数据排序法】选择排序法的图形理解和案例实现 | C++

第十五章 选择排序法 目录 第十五章 选择排序法 ●前言 ●认识排序 ●一、选择排序法是什么&#xff1f; 1.简要介绍 2.图形理解 3.算法分析 ●二、案例实现 1.案例一 ● 总结 前言 排序算法是我们在程序设计中经常见到和使用的一种算法&#xff0c;它主要是将一堆不规则…

【算法基础】整数二分查找法

&#x1f466;个人主页&#xff1a;Weraphael ✍&#x1f3fb;作者简介&#xff1a;目前是C语言学习者 ✈️专栏&#xff1a;【C/C】算法 &#x1f40b; 希望大家多多支持&#xff0c;咱一起进步&#xff01;&#x1f601; 如果文章对你有帮助的话 欢迎 评论&#x1f4ac; 点赞…

初识计算机网络

文章目录一、网络发展史独立模式网络互连局域网LAN广域网WAN二、网络通信基础IP地址端口号协议五元组协议分层OSI七层模型TCP/IP五层模型简单的传输流程发送方接收方一、网络发展史 独立模式 独立模式&#xff1a;顾名思义&#xff0c;也就是我们的每台计算机直接是相互独立的…

OpenPPL PPQ量化(1):原理介绍与实践尝鲜

目录 量化原理 为什么需要量化&#xff1f; 量化粒度 框架综述 算子划分 量化中的图融合操作 量化实践&#xff1a;以pytorch mobilenet v2 模型为例 源码阅读 torch模型和onnx量化过程中的区别 后记 量化原理 为什么需要量化&#xff1f; 1、减少内存带宽和存储空…

Android so库开发——Swig工具使用(五)

SWIG 是一种软件开发工具&#xff0c;它将 C 和 C 编写的程序与各种高级编程语言连接起来。这里我们用它来将 C/C 转换成 Java。 一、Swig安装 1、下载 官网&#xff1a;SWIG官网下载 源码链接 GitHub&#xff1a;https://github.com/swig/swig.git 这两个地址可能会出现无…

【C++】C++11语法解析

&#x1f308;欢迎来到C专栏~~C11 (꒪ꇴ꒪(꒪ꇴ꒪ )&#x1f423;,我是Scort目前状态&#xff1a;大三非科班啃C中&#x1f30d;博客主页&#xff1a;张小姐的猫~江湖背景快上车&#x1f698;&#xff0c;握好方向盘跟我有一起打天下嘞&#xff01;送给自己的一句鸡汤&#x1f…

HTTP协议详细解读

文章目录1. HTTP概念2. HTTP 特点3. HTTP 协议的工作过程4. 认识URL5. HTTP 请求数据格式6. HTTP 响应数据格式7. 总结&#x1f4c2;橙子精品文章学习推荐1. HTTP概念 HTTP&#xff1a;HyperText Transfer Protocol&#xff0c;超文本传输协议。HTTP 协议规定了浏览器和服务器…

【技术调研】关于仪表盘转图片推送钉钉的技术方案调研

方案1—纯后端实现 后端写定时任务&#xff0c;定时启动查询服务。查询出数据集结果&#xff0c;拼接成Table样式&#xff0c;再转换成图片。推送至钉钉。 优点&#xff1a;只需要后端开发&#xff0c;不涉及前端。 缺点&#xff1a;太定制化&#xff0c;不通用&#xff0c;样…

前端面试题2023含答案 前端必备知识点 混淆 刷题 查漏补缺【持续更新中】

目录1. vue双向数据绑定&#xff08;响应式&#xff09;原理2. HTML 语义化&#xff08;语义化标签&#xff09;3. 标签上 title 与 alt 属性4. CSS单位&#xff1a;1px、1em、1rem、1vh / 1vw 的含义5. 网页前端性能优化的方式6. HTTP常见的状态码7. Vuex是什么&#xff08;有…

PriorityQueue

PriorityQueue其本质是一个优先级队列的集合。 1. 优先级队列 那什么是优先级队列呢&#xff1f;我们先从它的概念聊起。 概念&#xff1a; 前面介绍过队列&#xff0c;队列是一种先进先出(FIFO)的数据结构&#xff0c;但有些情况下&#xff0c;操作的数据可能带有优先级&a…

用css实现简易报警灯

主题 用css来实现一个简易的报警灯效果 实现效果 实现思路 实现的核心是一个灯罩和一个灯芯。灯罩主要是使用了border-radius圆角边框&#xff0c;灯芯主要是radial-gradient径向渐变。再使用动画效果来实现一闪一闪的效果。让我们来一步一步实现效果。 灯罩实现 因为大…

FFMPEG Vcl Player 7.0 For Delphi Crack

FFMPEG Vcl Player For Delphi 7.0【www_flashavconverter_com】是一个基于 directshow 和 ffmpeg 的 vcl 播放器&#xff0c;用于解码和播放视频/音频。 新增&#xff1a;升级到最新的FFMPEG Runtime(5.1.x)并支持Delphi 11.2 支持 Dash 回放 支持播放AES加密网络流 Nvidia 卡…

开关电源-TL431与光耦组成的电压反馈电路-TL431工作过程分析

开关电源&#xff1a;TL431与光耦组成的电压反馈电路 #开关电源#开关电源最基本的要求是输入电压变化时&#xff0c;输出电压保持恒定&#xff0c;而与此相关的测试如电压调整率、负载调整率等也是衡量开关电源性能的重要指标&#xff0c;实现输出电压恒定的方式是反馈&#x…

word@菜单自定义和公式输入

菜单栏快捷键设置 word 设置(选项) Word options (General) - Microsoft Support 点击文件->选项 自定义word菜单 自定义功能区 Customize the ribbon in Word - Microsoft Support Customizing the source list of commandsThe ribbon listAdd or remove commandsReor…

代码随想录NO31 |Leetcode 122.买卖股票的最佳时机II 55. 跳跃游戏 45.跳跃游戏II

贪心之Leetcode122.买卖股票的最佳时机II 55. 跳跃游戏 45.跳跃游戏II今天是贪心第二天的了&#xff01; 122.买卖股票的最佳时机II 给你一个整数数组 prices &#xff0c;其中 prices[i] 表示某支股票第 i 天的价格。 在每一天&#xff0c;你可以决定是否购买和/或出售股票。…

UDP+有穷自动状态机构造网络指令系统

UDP有穷自动状态机构造网络指令系统 项目背景 某展厅的小项目&#xff0c;使用Unity制作了一个视频播放器&#xff0c;作为受控端&#xff0c;需要接收解说员手中的“PAD”或“触控屏电脑”等设备发来的控制指令。要求指令系统满足以下功能&#xff1a; 能够随意切换要播放的…

C++string的模拟实现(上篇)

目录 一.命名空间的封装与交换函数模板 1.命名空间的封装与类的定义 2.交换函数模板 二.string类的四个重要默认成员函数 1.构造函数的类外定义&#xff1a; 2.析构函数在类外的定义 3.拷贝构造函数在类外的定义 4.赋值运算符重载在类外的定义 5.关于两个string对象…

JAVA 同步锁

文章目录synchronizedsynchronized 作用当前对象synchronized 作用订单号条件synchronized 作用订单号字符串条件ReentrantLock 加 ConcurrentHashMap需求&#xff1a; 同一个订单才加同步锁&#xff0c;不同订单可并行synchronized synchronized是Java中的关键字&#xff0c;…
最新文章